PSD 画像リソースの操作方法 Python で

PSD 画像リソースの操作方法 Python で

ロードされた PsdImage は、グリッド、ガイド、ICC プロファイルのペイロードなどのメタデータ形式のエントリである画像リソースブロックを — 2 つの読み取り専用ビューで公開し、インデックスカラー パレット用の別個のサマリーも提供します。

ステップバイステップ ガイド

ステップ 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: 必要なクラスをインポートする

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.resources.imageresourceids import ImageResourceIds

ステップ 3: 画像リソースをチェックしてカウントする

image = PsdImage.load("input.psd")

print(f"Has image resources: {image.has_image_resources}")
print(f"Resource count: {image.resource_count}")

ステップ4: image_resources を使用してリソースブロックを一覧表示する

PsdImage.image_resources はリソースごとに PreservedResourceBlock を返し、生のリソースID、名前、バイトサイズが含まれます:

for block in image.image_resources:
    print(f"ID: {block.id}, name: {block.name!r}, size: {block.size} bytes")

特定のリソースは、block.id を ImageResourceIds にある既知の定数と比較することで認識できます:

for block in image.image_resources:
    if block.id == ImageResourceIds.ICC_PROFILE:
        print(f"Found an ICC profile resource ({block.data_size} bytes)")

このFOSSビルドのリソースパーサーはリソースIDを意味的なプロパティに変換しません — block.id を自分で ImageResourceIds と比較することが、特定のリソースを認識するサポートされた方法です。


ステップ5: resources を使用してリソースサマリを一覧表示する

PsdImage.resources はリソースごとに別個の PsdResourceInfo サマリを返し、kind 分類が含まれます:

for info in image.resources:
    print(f"ID: {info.resource_id}, kind: {info.kind}, data length: {info.data_length}")

このFOSSビルドでは、kind は常に PsdResourceKind.UNKNOWN です — 特定のリソース種別(グローバル角度、ICCプロファイル)の意味的分類は実装されていないため、kind は情報提供のみとみなし、特定のリソースを認識するには resource_id(ステップ4)に依存してください。


ステップ6: インデックスカラー パレットを読み取る

ドキュメントのカラーデータがパレットベースの場合、PsdImage.indexed_palette はそのエントリを返します:

palette = image.indexed_palette

if palette is not None:
    print(f"Palette entries: {len(palette.entries)}")

一般的な問題と修正

image.indexed_palette is None. 文書のカラーデータ種別はありません INDEXED_PALETTE — インデックスカラーの文書のみがパレットを持ちます。

Setting image.image_resources raises NotSupportedException. getter はリソースの一覧取得に機能しますが、setter はこの FOSS ビルドではサポートされていません。

Calling block.save() 上で PreservedResourceBlock raises NotImplementedError. 個別のリソースブロックを直接保存することはサポートされていません — リソースは呼び出した際に自動的に往復します image.save() 文書全体に対して。

has_icc_profile, is_icc_profile_untagged, そして global_angle 決して変わりません。 これらの3つ PsdImage プロパティはこのFOSSビルドで固定されたプレースホルダー値です(has_icc_profile は常に False, is_icc_profile_untagged は常に None, global_angle は常に 0)ロードされたドキュメントの実際の内容に関係なく — このビルドのリソースパーサはID固有のセマンティック値を再構築しません。Step 4 の block.id 比較 ImageResourceIds これらのリソースを自分で検出する必要がある場合は。

よくある質問

image_resources と resources の違いは何ですか?

両方とも同じ基礎リソースブロックを一覧表示しますが、オブジェクトタイプが異なります: image_resources は PreservedResourceBlock オブジェクトを返します(生の ID/名前/サイズで、ラウンドトリップに使用されます)、一方 resources は PsdResourceInfo のサマリーを返します(kind 分類を追加し、現在は常に UNKNOWN です)。

画像リソースを変更または削除できますか?

いいえ — image_resources の setter は NotSupportedException を発生させ、PreservedResourceBlock.save() は直接呼び出すと NotImplementedError を発生させます。この FOSS ビルドではリソースは読み取り専用です。

参照

 日本語