Resources
Resources
Załadowany PsdImage udostępnia swoje bloki zasobów obrazu — wpisy w stylu metadanych, takie jak siatki, prowadnice i ładunki profilu ICC — za pośrednictwem dwóch widoków tylko do odczytu, a także oddzielne podsumowanie dla indeksowanych palet kolorów.
Wymienianie bloków zasobów
PsdImage.image_resources zwraca PreservedResourceBlock dla każdego zasobu, zawierający surowy identyfikator zasobu, nazwę i rozmiar w bajtach:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.resources.imageresourceids import ImageResourceIds
image = PsdImage.load(input_path)
for block in image.image_resources:
print(f"ID: {block.id}, name: {block.name!r}, size: {block.size} bytes")PsdImage.resources zwraca oddzielne podsumowanie PsdResourceInfo dla każdego zasobu, dodając klasyfikację kind — w tej wersji FOSS kind jest zawsze PsdResourceKind.UNKNOWN, ponieważ parser zasobów w tej kompilacji nie dekoduje konkretnych identyfikatorów zasobów na właściwości semantyczne.
Rozpoznawanie znanych identyfikatorów zasobów
Ponieważ kind nie jest rozwiązywany semantycznie, rozpoznaj konkretny zasób, porównując block.id z stałymi w ImageResourceIds:
for block in image.image_resources:
if block.id == ImageResourceIds.ICC_PROFILE:
print(f"Found an ICC profile resource ({block.data_size} bytes)")Odczytywanie indeksowanej palety kolorów
Jeśli dane kolorów dokumentu są oparte na palecie, PsdImage.indexed_palette zwraca jej wpisy:
palette = image.indexed_palette
if palette is not None:
print(f"Palette entries: {len(palette.entries)}")Wskazówki i najlepsze praktyki
- getter
PsdImage.image_resourcesdziała do listowania zasobów, ale jego setter podnosiNotSupportedException— zasoby są tylko do odczytu w tej wersji FOSS. PsdImage.has_icc_profile,is_icc_profile_untaggediglobal_anglesą stałymi wartościami zastępczymi w tej wersji FOSS (zawsze odpowiednioFalse,Nonei0), niezależnie od rzeczywistej zawartości wczytanego dokumentu — użyj powyższego wzorca porównania resource-ID, jeśli musisz samodzielnie wykryć te zasoby.PreservedResourceBlock.save()podnosiNotImplementedError, jeśli wywołany jest bezpośrednio — zasoby są automatycznie przekazywane w obie strony, gdy wywołaszimage.save()na całym dokumencie.
Typowe problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
image.indexed_palette jest None | Rodzaj danych koloru dokumentu nie jest INDEXED_PALETTE | Tylko dokumenty z indeksowanymi kolorami posiadają paletę |
NotSupportedException ustawienie image.image_resources | Setter nie jest obsługiwany w tej wersji FOSS | Traktuj image_resources jako tylko do odczytu |
has_icc_profile / is_icc_profile_untagged / global_angle nigdy nie zmieniaj | Te 3 właściwości są twardo zakodowanymi placeholderami w tej wersji FOSS | Porównaj block.id z ImageResourceIds zamiast tego (zobacz powyżej) |
FAQ
Jaka jest różnica między image_resources a resources?
Oba wymieniają te same podstawowe bloki zasobów, ale jako różne typy obiektów: image_resources zwraca obiekty PreservedResourceBlock (surowe ID/nazwę/rozmiar, używane do round-tripping), podczas gdy resources zwraca podsumowania PsdResourceInfo (dodaje klasyfikację kind, obecnie zawsze UNKNOWN).
Czy mogę zmodyfikować lub usunąć zasób obrazu?
Nie — setter image_resources rzuca NotSupportedException, a PreservedResourceBlock.save() rzuca NotImplementedError, jeśli wywołany bezpośrednio. Zasoby są tylko do odczytu w tej wersji FOSS.
Podsumowanie API Reference
| Klasa/Metoda | Opis |
|---|---|
PsdImage.image_resources | Surowe bloki zasobów (PreservedResourceBlock, tylko do odczytu) |
PsdImage.resources | Podsumowania zasobów (PsdResourceInfo, kind zawsze UNKNOWN) |
PsdImage.indexed_palette | Podsumowanie indeksowanej palety kolorów, gdy jest dostępne |
ImageResourceIds | Znane stałe identyfikatorów zasobów do porównania z resource_id/id |