Como Inspecionar Seções de Documento PSD em Python

Como Inspecionar Seções de Documento PSD em Python

Um PsdImage carregado expõe objetos de resumo somente leitura para as seções estruturais de um documento PSD/PSB — o cabeçalho, a seção de dados de cor, a seção de dados de imagem e a seção de recursos de imagem — sem exigir qualquer análise manual ao nível de bytes.

Guia Passo a Passo

Passo 1: Instalar o Pacote

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

Passo 2: Importar as Classes Necessárias

from aspose_psd_foss.psdimage import PsdImage

Passo 3: Inspecionar a Seção de Cabeçalho

PsdImage.header retorna um PsdHeader com os campos estruturais brutos do documento:

image = PsdImage.load("input.psd")

header = image.header
print(f"Size: {header.width}x{header.height}, channels: {header.channels}")
print(f"Bit depth: {header.bit_depth}, raw color mode: {header.color_mode}")
print(f"Is PSB: {header.is_large_document}")

PsdHeader.color_mode retorna o campo bruto do modo de cor inteiro como armazenado no arquivo — use PsdImage.color_mode em vez disso se precisar do enum fortemente tipado ColorModes.


Etapa 4: Inspecionar a Seção de Dados de Cor

PsdImage.color_data_info retorna um resumo PsdColorDataInfo; kind é um valor PsdColorDataKind (NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD ou RAW_PRESERVED):

if image.has_color_mode_data:
    color_info = image.color_data_info
    print(f"Color data kind: {color_info.kind}, raw bytes: {color_info.raw_data_length}")

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

Etapa 5: Inspecionar a Seção de Dados da Imagem

PsdImage.image_data_info retorna um resumo PsdImageDataInfo descrevendo como os dados de pixel mesclados são codificados:

data_info = image.image_data_info
print(f"Compression: {image.compression}")
print(f"Data kind: {data_info.kind}, uses prediction: {data_info.uses_prediction}")
print(f"Compressed payload length: {data_info.compressed_payload_length}")

data_info.kind é um valor ImageDataKind (RAW, RLE, ZIP ou UNKNOWN) que descreve a própria codificação dos dados de imagem mesclados — image.compression relata a mesma codificação através do enum CompressionMethod separado.


Etapa 6: Inspecionar a Seção de Recursos da Imagem

print(f"Has image resources: {image.has_image_resources}")
print(f"Resource count: {image.resource_count}")

for resource in image.resources:
    print(f"Resource ID: {resource.resource_id}, kind: {resource.kind}")

PsdImage.resources retorna somente leitura PsdResourceInfo resumos. O separado PsdImage.image_resources propriedade também tem um getter, mas seu setter lança NotSupportedException nesta compilação FOSS — veja Troubleshooting para a lista completa de setters somente leitura.

Problemas Comuns e Soluções

header.color_mode não corresponde image.color_mode. Isso é esperado — PsdHeader.color_mode é o campo inteiro bruto do arquivo, enquanto PsdImage.color_mode é o tipado fortemente ColorModes enum construído a partir dele.

color_data_info.indexed_palette is None. O tipo de dados de cor do documento não é INDEXED_PALETTE — apenas documentos de cor indexada carregam uma paleta.

Setting image.image_resources raises NotSupportedException. Este setter não é suportado nesta compilação FOSS; trate image_resources and resources como somente leitura.

Perguntas Frequentes

Posso modificar as seções de cabeçalho, dados de cor ou dados de imagem diretamente?

Não — PsdHeader, PsdColorDataInfo, ColorData e PsdImageDataInfo são todos objetos de resumo somente leitura nesta compilação FOSS. Não há setters públicos em nenhuma de suas propriedades.

Qual é a diferença entre image.compression e image.image_data_kind?

Eles descrevem a mesma codificação subjacente por meio de dois enums separados: image.compression retorna um valor CompressionMethod, enquanto image.image_data_info.kind retorna um valor ImageDataKind.

Ver também

 Português