Resources

Resources

Загруженный PsdImage раскрывает свои блоки ресурсов изображения — записи в стиле метаданных, такие как сетки, направляющие и полезные данные ICC-профиля — через два только для чтения представления, а также отдельное резюме для индексированных цветовых палитр.


Список блоков ресурсов

PsdImage.image_resources возвращает PreservedResourceBlock для каждого ресурса, включая необработанный идентификатор ресурса, имя и размер в байтах:

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 вместо этого возвращает отдельное резюме PsdResourceInfo для каждого ресурса, добавляя классификацию kind — в этой сборке FOSS kind всегда PsdResourceKind.UNKNOWN, поскольку парсер ресурсов этой сборки не декодирует конкретные идентификаторы ресурсов в семантические свойства.


Распознавание известных идентификаторов ресурсов

Поскольку kind не разрешён семантически, распознайте конкретный ресурс, сравнивая block.id с константами в ImageResourceIds:

for block in image.image_resources:
    if block.id == ImageResourceIds.ICC_PROFILE:
        print(f"Found an ICC profile resource ({block.data_size} bytes)")

Чтение индексированной цветовой палитры

Если цветовые данные документа основаны на палитре, PsdImage.indexed_palette возвращает её элементы:

palette = image.indexed_palette

if palette is not None:
    print(f"Palette entries: {len(palette.entries)}")

Советы и лучшие практики

  • Геттер PsdImage.image_resources работает для перечисления ресурсов, но его сеттер вызывает NotSupportedException — ресурсы только для чтения в этой сборке FOSS.
  • PsdImage.has_icc_profile, is_icc_profile_untagged и global_angle являются фиксированными значениями-заполнителями в этой сборке FOSS (всегда False, None и 0 соответственно), независимо от реального содержимого загруженного документа — используйте вышеописанный шаблон сравнения ID ресурсов, если вам нужно самостоятельно обнаружить эти ресурсы.
  • PreservedResourceBlock.save() вызывает NotImplementedError, если вызвать его напрямую — ресурсы автоматически проходят сквозной процесс при вызове image.save() для всего документа.

Распространённые проблемы

ПроблемаПричинаИсправление
image.indexed_palette является NoneТип цветовых данных документа не INDEXED_PALETTEТолько документы с индексированными цветами содержат палитру
Настройка NotSupportedException image.image_resourcesУстановщик не поддерживается в этой сборке FOSSОбрабатывайте image_resources как только для чтения
has_icc_profile / is_icc_profile_untagged / global_angle никогда не меняютсяЭти 3 свойства являются жёстко закодированными заглушками-заполнителями в этой FOSS-сборкеСравните block.id с ImageResourceIds вместо этого (см. выше)

FAQ

В чём разница между image_resources и resources?

Оба перечисляют одни и те же базовые блоки ресурсов, но как разные типы объектов: image_resources возвращает объекты PreservedResourceBlock (необработанные ID/имя/размер, используемые для обратного прохода), в то время как resources возвращает сводки PsdResourceInfo (добавляет классификацию kind, в данный момент всегда UNKNOWN).

Могу ли я изменить или удалить ресурс изображения?

Нет — image_resources’ setter генерирует NotSupportedException, а PreservedResourceBlock.save() генерирует NotImplementedError, если вызвать напрямую. Ресурсы только для чтения в этой сборке FOSS.


API Reference Сводка

Класс/МетодОписание:
PsdImage.image_resourcesБлоки необработанных ресурсов (PreservedResourceBlock, только для чтения)
PsdImage.resourcesСводки ресурсов (PsdResourceInfo, kind всегда UNKNOWN)
PsdImage.indexed_paletteСводка индексированной цветовой палитры, если присутствует
ImageResourceIdsИзвестные константы идентификаторов ресурсов для сравнения с resource_id/id

См. также:

 Русский