PSD Görüntü Kaynaklarıyla Python içinde Nasıl Çalışılır

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:$PYTHONPATH

Adım 2: Gerekli Sınıfları İçeri Aktarın

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.resources.imageresourceids import ImageResourceIds

Adı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.

Ayrıca Bakınız

 Türkçe