Python で PSD ドキュメント セクションを検査する方法

Python で PSD ドキュメント セクションを検査する方法

読み込まれたPsdImageは、PSD/PSBドキュメントの構造セクション—ヘッダー、カラーデータセクション、イメージデータセクション、イメージリソースセクション—に対する読み取り専用のサマリーオブジェクトを提供し、手動でバイトレベルの解析を行う必要がありません。

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

ステップ 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

ステップ 3: ヘッダーセクションを検査する

PsdImage.header は、ドキュメントの生の構造フィールドを含む PsdHeader を返します:

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

header = image.header
print(f"Size: {header.width}x{header.height}, channels: {header.channels}")
print(f"Bit depth: {header.bit_depth}, raw color mode: {header.color_mode}")
print(f"Is PSB: {header.is_large_document}")

PsdHeader.color_mode は、ファイルに保存されている生の整数カラー モード フィールドを返します — 強く型付けされた ColorModes 列挙体が必要な場合は、代わりに PsdImage.color_mode を使用してください。


ステップ 4: カラーデータ セクションを検査する

PsdImage.color_data_info は PsdColorDataInfo の概要を返します; kind は PsdColorDataKind 値で、(NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD, または RAW_PRESERVED) です:

if image.has_color_mode_data:
    color_info = image.color_data_info
    print(f"Color data kind: {color_info.kind}, raw bytes: {color_info.raw_data_length}")

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

ステップ 5: 画像データ セクションを検査する

PsdImage.image_data_info は、マージされたピクセル データのエンコード方法を説明する PsdImageDataInfo の概要を返します:

data_info = image.image_data_info
print(f"Compression: {image.compression}")
print(f"Data kind: {data_info.kind}, uses prediction: {data_info.uses_prediction}")
print(f"Compressed payload length: {data_info.compressed_payload_length}")

data_info.kind は、マージされた画像データ自身のエンコードを示す ImageDataKind 値 (RAW, RLE, ZIP, または UNKNOWN) です — image.compression は別個の CompressionMethod 列挙体を通じて同じエンコードを報告します。


ステップ 6: 画像リソース セクションを検査する

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

for resource in image.resources:
    print(f"Resource ID: {resource.resource_id}, kind: {resource.kind}")

PsdImage.resources 読み取り専用を返す PsdResourceInfo 要約。別の PsdImage.image_resources プロパティにも getter があり、その setter は例外を発生させます NotSupportedException この FOSS ビルドでは — 参照 Troubleshooting 読み取り専用 setter の全リストについては。

一般的な問題と対策

header.color_mode 一致しません image.color_mode. これは期待通りです — PsdHeader.color_mode はファイルからの生の整数フィールドであり、 PsdImage.color_mode は強く型付けされた ColorModes それから構築された列挙型。

color_data_info.indexed_palette is None. ドキュメントのカラー データ種別は INDEXED_PALETTE — インデックスカラーのドキュメントのみがパレットを持ちます。

Setting image.image_resources raises NotSupportedException. このセッターはこの FOSS ビルドではサポートされていません; こちらを image_resources and resources 読み取り専用として扱ってください。

よくある質問

ヘッダー、カラー データ、または画像データのセクションを直接変更できますか?

いいえ — PsdHeader、PsdColorDataInfo、ColorData、および PsdImageDataInfo はすべてこの FOSS ビルドの読み取り専用サマリーオブジェクトです。いずれのプロパティにも公開セッターはありません。

image.compression と image.image_data_kind の違いは何ですか?

それらは 2 つの別々の列挙型を通じて同一の基礎エンコーディングを表します。image.compression は CompressionMethod 値を返し、image.image_data_info.kind は ImageDataKind 値を返します。

参照

 日本語