Python で PSD レイヤーを操作する方法
このガイドでは、ドキュメントのレイヤーを一覧表示し、編集可能なレイヤーメタデータを読み取り・変更し、レイヤーの位置を再配置し、コレクションからレイヤーを削除する方法を示します。ロードされた PsdImage の layers プロパティは、その Layer オブジェクトのコレクションを返します。各 Layer は、名前、可視性、不透明度、クリッピング、ブレンドモード、位置(境界エッジ)—編集可能なメタデータを提供し、さらに読み取り専用の全体境界とチャンネル情報も含みます。
ステップバイステップガイド
ステップ 1: パッケージをインストールする
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATHステップ 2: 必要なクラスをインポートする
PsdImage はドキュメントをロードします;BlendMode は後でレイヤーのブレンドモードを設定するために使用されます:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendModeステップ3:ドキュメントを読み込み、レイヤーを一覧表示する
ドキュメントを読み込み、次に layers を反復して各レイヤーの名前とジオメトリを確認します:
image = PsdImage.load("input.psd")
for layer in image.layers:
print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")ステップ4:レイヤーの表示状態、透明度、ブレンドモードを読み取り・編集する
is_visible、opacity(通常 0-255)、clipping、name、および blend_mode_key はすべて機能するセッターがあります:
layer = image.layers[0]
layer.is_visible = False # hide the layer
layer.opacity = 200 # ~78% opacity
layer.blend_mode_key = BlendMode.MULTIPLY
layer.name = "Renamed Layer"ステップ5:レイヤー境界を読み取り、位置を変更する
bounds、width、height、および channels_count は読み取り専用です — ただし、top、left、bottom、right はそれぞれレイヤーの位置を変更する機能するセッターがあります:
print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")
layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60ステップ6:レイヤーコレクションを置き換える
PsdImage.layers 自体に機能するセッターがあるため、コレクション全体を置き換えることができます(例:レイヤーを削除する):
image.layers = [l for l in image.layers if l.name != "Renamed Layer"]ステップ 7: ドキュメントを保存する
前のステップで行ったすべての編集をディスクに永続化し、画像のリソースを解放してください:
image.save("output.psd")
image.dispose()一般的な問題と修正
NotSupportedException 設定するとき channel_information, layer_mask_data, または layer_blending_ranges_data. これらの3つ Layer セッターはこのFOSSビルドではサポートされていません — 読み取り専用として扱ってください。
不透明度の値が設定後に正しくないように見えます。 opacity 一般的には0〜255の値で、0.0〜1.0の小数やパーセンテージではありません — layer.opacity = 200 約78%不透明(200/255)を意味します。
レイヤーへの変更が保存後に反映されません。 変更していることを確認してください Layer 取得元のインスタンス image.layers、そして呼び出すこと image.save() 編集を行った後に。
よくある質問
ドキュメントからレイヤーを削除できますか?
はい — PsdImage.layers には動作するセッターがあり、フィルタされたリストを割り当ててレイヤーを削除できます(ステップ6を参照)。
利用可能なブレンドモードは何ですか?
BlendMode には NORMAL、MULTIPLY、SCREEN、OVERLAY、DARKEN などの値が含まれます — Layer.blend_mode_key を介して設定します。
レイヤーマスクデータは利用可能ですか?
Layer.layer_mask_data には動作するゲッターがありますが、この FOSS ビルドではセッターが NotSupportedException を発生させます。