Cara Memeriksa Bagian Dokumen PSD di Python

Cara Memeriksa Bagian Dokumen PSD di Python

Sebuah PsdImage yang dimuat menampilkan objek ringkasan hanya-baca untuk bagian struktural dari dokumen PSD/PSB — header, bagian data warna, bagian data gambar, dan bagian sumber daya gambar — tanpa memerlukan parsing manual pada tingkat byte.

Panduan Langkah demi Langkah

Langkah 1: Instal Paket

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

Langkah 2: Impor Kelas yang Diperlukan

from aspose_psd_foss.psdimage import PsdImage

Langkah 3: Periksa Bagian Header

PsdImage.header mengembalikan sebuah PsdHeader dengan bidang struktural mentah dokumen:

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 mengembalikan bidang mode warna integer mentah sebagaimana disimpan dalam file — gunakan PsdImage.color_mode sebagai gantinya jika Anda memerlukan enum ColorModes yang bertipe kuat.


Langkah 4: Periksa Bagian Data Warna

PsdImage.color_data_info mengembalikan ringkasan PsdColorDataInfo; kind adalah nilai PsdColorDataKind (NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD, atau 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)}")

Langkah 5: Periksa Bagian Data Gambar

PsdImage.image_data_info mengembalikan ringkasan PsdImageDataInfo yang menjelaskan bagaimana data piksel yang digabungkan dienkode:

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 adalah nilai ImageDataKind (RAW, RLE, ZIP, atau UNKNOWN) yang menggambarkan enkoding data gambar yang digabungkan — image.compression melaporkan enkoding yang sama melalui enum CompressionMethod terpisah.


Langkah 6: Periksa Bagian Sumber Daya Gambar

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 mengembalikan read-only PsdResourceInfo ringkasan. Yang terpisah PsdImage.image_resources properti juga memiliki getter, tetapi setter-nya melempar NotSupportedException dalam build FOSS ini — lihat Troubleshooting untuk daftar lengkap setter read-only.

Masalah Umum dan Solusinya

header.color_mode tidak cocok image.color_mode. Ini diharapkan — PsdHeader.color_mode adalah bidang integer mentah dari file, sementara PsdImage.color_mode adalah tipe yang kuat ColorModes enum yang dibangun darinya.

color_data_info.indexed_palette is None. Jenis data warna dokumen tidak INDEXED_PALETTE — hanya dokumen berwarna terindeks yang membawa palet.

Setting image.image_resources raises NotSupportedException. Setter ini tidak didukung dalam build FOSS ini; anggap image_resources and resources sebagai read-only.

Pertanyaan yang Sering Diajukan

Apakah saya bisa memodifikasi bagian header, data warna, atau data gambar secara langsung?

Tidak — PsdHeader, PsdColorDataInfo, ColorData, dan PsdImageDataInfo semuanya merupakan objek ringkasan yang hanya dapat dibaca dalam build FOSS ini. Tidak ada setter publik pada properti apa pun mereka.

Apa perbedaan antara image.compression dan image.image_data_kind?

Mereka menggambarkan enkoding dasar yang sama melalui dua enum terpisah: image.compression mengembalikan nilai CompressionMethod, sementara image.image_data_info.kind mengembalikan nilai ImageDataKind.

Lihat Juga

 Bahasa Indonesia