PSD Görüntü Kaynaklarıyla Python içinde Nasıl Çalışılır
Yüklenmiş bir PsdImage, görüntü kaynak bloklarını — ızgaralar, kılavuzlar ve ICC profil verileri gibi meta veri tarzı girişler — iki salt okunur görünüm aracılığıyla ortaya çıkarır, ayrıca indeksli renk paletleri için ayrı bir özet sunar.
Adım Adım Kılavuz
Adım 1: Paketi Yükleyin
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:$PYTHONPATHAdım 2: Gerekli Sınıfları İçeri Aktarın
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.resources.imageresourceids import ImageResourceIdsAdım 3: Görüntü Kaynaklarını Kontrol Edin ve Sayın
image = PsdImage.load("input.psd")
print(f"Has image resources: {image.has_image_resources}")
print(f"Resource count: {image.resource_count}")Adım 4: image_resources aracılığıyla Kaynak Bloklarını Listele
PsdImage.image_resources, her kaynak için bir PreservedResourceBlock döndürür; ham kaynak kimliği, ad ve bayt boyutu içerir:
for block in image.image_resources:
print(f"ID: {block.id}, name: {block.name!r}, size: {block.size} bytes")Belirli bir kaynağı, block.id‘ı ImageResourceIds‘deki bilinen sabitlerle karşılaştırarak tanımlayın:
for block in image.image_resources:
if block.id == ImageResourceIds.ICC_PROFILE:
print(f"Found an ICC profile resource ({block.data_size} bytes)")Bu FOSS sürümünün kaynak ayrıştırıcısı, kaynak kimliklerini anlamsal özelliklere dönüştürmez — block.id‘ı ImageResourceIds‘e karşılaştırarak kendiniz tanımlamak, belirli bir kaynağı tanımanın desteklenen yoludur.
Adım 5: resources aracılığıyla Kaynak Özetlerini Listele
PsdImage.resources, her kaynak için ayrı bir PsdResourceInfo özeti döndürür; buna bir kind sınıflandırması dahildir:
for info in image.resources:
print(f"ID: {info.resource_id}, kind: {info.kind}, data length: {info.data_length}")Bu FOSS sürümünde, kind her zaman PsdResourceKind.UNKNOWN‘tir — belirli kaynak türlerinin (global açı, ICC profili) anlamsal sınıflandırması uygulanmamıştır, bu yüzden kind‘yi yalnızca bilgilendirici olarak değerlendirin ve belirli bir kaynağı tanımak için resource_id (Adım 4)’e güvenin.
Adım 6: Bir Dizinli Renk Paleti Oku
Eğer belgenin renk verisi palet tabanlıysa, PsdImage.indexed_palette girişlerini döndürür:
palette = image.indexed_palette
if palette is not None:
print(f"Palette entries: {len(palette.entries)}")Yaygın Sorunlar ve Çözümler
image.indexed_palette is None. Belgenin renk veri türü değil INDEXED_PALETTE — yalnızca indeksli renkli belgeler bir palet taşır.
Setting image.image_resources raises NotSupportedException. Getter, kaynakları listelemek için çalışır, ancak setter bu FOSS yapısında desteklenmez.
Calling block.save() bir PreservedResourceBlock raises NotImplementedError. Bireysel kaynak bloklarını doğrudan kaydetmek desteklenmez — kaynaklar, çağırdığınızda otomatik olarak round-trip yapılır image.save() tüm belge üzerinde.
has_icc_profile, is_icc_profile_untagged, ve global_angle asla değişmez. Bu üç PsdImage özellikler bu FOSS yapısında sabit yer tutucu değerlerdir (has_icc_profile her zaman False, is_icc_profile_untagged her zaman None, global_angle her zaman 0) yüklenen belgenin gerçek içeriğine bakılmaksızın — bu yapının kaynak ayrıştırıcısı ID-özgü anlamsal değerleri yeniden oluşturmaz. Step 4’ün block.id karşılaştırması ImageResourceIds bu kaynakları kendiniz tespit etmeniz gerekiyorsa.
Sık Sorulan Sorular
image_resources ile resources arasındaki fark nedir?
İkisi de aynı temel kaynak bloklarını listeler, ancak farklı nesne türleri olarak: image_resources PreservedResourceBlock nesnelerini döndürür (ham ID/isim/boyut, döngüsel işlem için kullanılır), resources ise PsdResourceInfo özetlerini döndürür (kind sınıflandırması ekler, şu anda her zaman UNKNOWN).
Bir görüntü kaynağını değiştirebilir veya kaldırabilir miyim?
Hayır — image_resources‘nin ayarlayıcısı NotSupportedException hatasını yükseltir ve PreservedResourceBlock.save() doğrudan çağrıldığında NotImplementedError hatasını yükseltir. Bu FOSS derlemesinde kaynaklar yalnızca okunabilir.