Python で PSD レイヤーを操作する方法

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 を発生させます。

参照

 日本語