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 |