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 値を返します。