0
1

More than 3 years have passed since last update.

Python Psd-Tools

Posted at

今回は趣味で製作しているNscripterを使ったゲーム制作をする際に立ち絵が必要だったので
立ち絵を用意するためにいろいろ調べたので備忘録として残しておきます

使用するファイルは事前にPhotshopで開き名前を付けて保存
この際に互換性を優先するのチェックを外した状態で上書きします
こうしないとナゼカうまくいきませんでした(調査中)

ファイルの準備ができたら早速

'''モジュールをインストール'''
pip install psd-tools

環境の使用準備がこちら

psdexporter.py
#’’’必要モジュールをインポート’’’
#’’’画像出力するファイルをオープン’’’
from psd_tools import PSDImage

file_path = '任意のファイル.psd'
psd = PSDImage.open(file_path)

以上で画像出力の準備が完了しました。

今回のモジュールは少々癖がありほどほどに苦戦させられました。

ひとまずテストで画像を出力します。

psdexporter.py
from psd_tools import PSDImage

file_path = '任意のファイル.psd'
psd = PSDImage.open(file_path)

#’’’表示状態になっているレイヤーを統合した画像を出力’’’
psd.compose().save('任意パス.png')

今回は透過画像が欲しかったのでpngで出力
画像を出力する際にパスに書き込んだ拡張子を自動識別してファイルフォーマットを自動出力するようです
この時に出力される画像の状態についてですが、表示状態になっているレイヤーをすべてを統合して1枚の画像として出力します
ですが、いちいちペイントツールを立ち上げレイヤーを操作して保存してプログラムから出力していたら効率が悪すぎます
なのでペイントツールで編集などせずにプログラム上でレイヤーを操作してしまいましょう

PSDImageオブジェクトはレイヤー情報コレクションに持っていますのでこのようにFor文を使って設定していきます

from psd_tools import PSDImage

file_path = '任意のファイル.psd'
psd = PSDImage.open(file_path)

#’’’レイヤーをグループ(フォルダ)分けしている場合はグループ(フォルダ)を表示状態にしたうえで’’’
for rootlayer in psd:
    if rootlayer.name == '表示状態にするグループ(フォルダ)名'
        rootlayer.visible = True/False
      #’’’グループ(フォルダ)内のレイヤーを表示状態にします
        if layer.name == '表示状態にするレイヤー名'
            for layer in rootlayer:
                layer.visible = True/False
#’’’出力したい状態になるまで上記の条件分岐を書き込んでください’’’
#’’’絵師様が提供しているpsdを使う場合は一度ペイントツールでレイヤー構成やレイヤー名を確認しておくのが吉です’’’

#’’’作成したレイヤー構成でPILオブジェクトを発行して格納’’’
image = psd.compose()
#’’’PILオブジェクトが格納されていますのでこのままPILLOWで編集も可能ですが今回はそのまま画像をファイル出力します’’’
#’’’PILオブジェクトについてはほかの記事を参照されるほうがいいでしょう’’’

#’’’表示状態のレイヤーを画像として出力’’’
image.save('任意パス.png')

公式ドキュメントによればcomposeメソッドは実験段階のメソッドでありファイルの内容を完全に再現できない可能性がある旨の記事がありました
compose実行時に警告が表示されますが無視して実行してしまっても画像は出力されます

今回のスクリプトを描くにあたってこんなもの提供されている立ち絵を全パターン出力する以外での使用用途が見出せませんがまぁよしとしましょう

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1