Cara Bekerja dengan Sumber Daya Gambar PSD di Python
Sebuah PsdImage yang dimuat menampilkan blok sumber daya gambar-nya — entri bergaya metadata seperti kisi, panduan, dan muatan profil ICC — melalui dua tampilan hanya-baca, serta ringkasan terpisah untuk palet warna terindeks.
Panduan Langkah demi Langkah
Langkah 1: Pasang 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:$PYTHONPATHLangkah 2: Impor Kelas yang Diperlukan
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.resources.imageresourceids import ImageResourceIdsLangkah 3: Periksa dan Hitung Sumber Daya Gambar
image = PsdImage.load("input.psd")
print(f"Has image resources: {image.has_image_resources}")
print(f"Resource count: {image.resource_count}")Langkah 4: Daftar Blok Sumber Daya melalui image_resources
PsdImage.image_resources mengembalikan PreservedResourceBlock per sumber daya, dengan ID sumber daya mentah, nama, dan ukuran byte:
for block in image.image_resources:
print(f"ID: {block.id}, name: {block.name!r}, size: {block.size} bytes")Kenali sumber daya tertentu dengan membandingkan block.id dengan konstanta yang diketahui dalam ImageResourceIds:
for block in image.image_resources:
if block.id == ImageResourceIds.ICC_PROFILE:
print(f"Found an ICC profile resource ({block.data_size} bytes)")Parser sumber daya pada build FOSS ini tidak mendekode ID sumber daya menjadi properti semantik — membandingkan block.id dengan ImageResourceIds secara manual adalah cara yang didukung untuk mengenali sumber daya tertentu.
Langkah 5: Daftar Ringkasan Sumber Daya melalui resources
PsdImage.resources mengembalikan ringkasan PsdResourceInfo terpisah per sumber daya, termasuk klasifikasi kind:
for info in image.resources:
print(f"ID: {info.resource_id}, kind: {info.kind}, data length: {info.data_length}")Pada build FOSS ini, kind selalu PsdResourceKind.UNKNOWN — klasifikasi semantik untuk jenis sumber daya tertentu (sudut global, profil ICC) tidak diimplementasikan, jadi perlakukan kind hanya sebagai informasi dan bergantung pada resource_id (Langkah 4) untuk mengenali sumber daya tertentu.
Langkah 6: Baca Palet Warna Terindeks
Jika data warna dokumen berbasis palet, PsdImage.indexed_palette mengembalikan entri-entrinya:
palette = image.indexed_palette
if palette is not None:
print(f"Palette entries: {len(palette.entries)}")Masalah Umum dan Solusi
image.indexed_palette is None. Jenis data warna dokumen tidak INDEXED_PALETTE — hanya dokumen berwarna terindeks yang membawa palet.
Setting image.image_resources raises NotSupportedException. Getter berfungsi untuk menampilkan daftar sumber daya, tetapi setter tidak didukung dalam build FOSS ini.
Calling block.save() pada PreservedResourceBlock raises NotImplementedError. Menyimpan blok sumber daya individu secara langsung tidak didukung — sumber daya otomatis berputar kembali ketika Anda memanggil image.save() pada seluruh dokumen.
has_icc_profile, is_icc_profile_untagged, dan global_angle tidak pernah berubah. Ketiga ini PsdImage properti adalah nilai placeholder tetap dalam build FOSS ini (has_icc_profile selalu False, is_icc_profile_untagged selalu None, global_angle selalu 0) terlepas dari konten dokumen yang dimuat sebenarnya — parser sumber daya build ini tidak membangun kembali nilai semantik yang spesifik ID. Gunakan Step 4’s block.id perbandingan dengan ImageResourceIds jika Anda perlu mendeteksi sumber daya ini sendiri.
Pertanyaan yang Sering Diajukan
Apa perbedaan antara image_resources dan resources?
Keduanya menampilkan blok sumber daya yang mendasari yang sama, tetapi sebagai tipe objek yang berbeda: image_resources mengembalikan objek PreservedResourceBlock (ID/nama/ukuran mentah, digunakan untuk round-tripping), sementara resources mengembalikan ringkasan PsdResourceInfo (menambahkan klasifikasi kind, yang saat ini selalu UNKNOWN).
Apakah saya dapat memodifikasi atau menghapus sumber daya gambar?
Tidak — setter image_resources memunculkan NotSupportedException, dan PreservedResourceBlock.save() memunculkan NotImplementedError jika dipanggil secara langsung. Sumber daya bersifat baca-saja dalam build FOSS ini.