Como salvar e exportar documentos PSD em Python
Este guia mostra como salvar um documento editado em um caminho de arquivo, em um stream aberto, e como descartar uma imagem carregada posteriormente. PsdImage.save é o único ponto de entrada público para escrever um documento de volta — ele aceita tanto um caminho de arquivo quanto um stream gravável já aberto. O escritor de seção de baixo nível que realiza a codificação real dos bytes é um detalhe de implementação interno, não algo que você chama diretamente.
Guia Passo a Passo
Etapa 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:$PYTHONPATHEtapa 2: Importar as Classes Necessárias
PsdImage é a única classe que os exemplos deste guia precisam:
from aspose_psd_foss.psdimage import PsdImageEtapa 3: Salvar em um caminho de arquivo
Carregue um documento, faça uma edição e, em seguida, salve-o de volta em um caminho de arquivo:
image = PsdImage.load("input.psd")
image.layers[0].is_visible = False
image.save("output.psd")Etapa 4: Salvar em um fluxo aberto
Passar um fluxo em vez de um caminho deixa o fluxo aberto após a gravação — você controla quando fechá-lo:
with open("output.psd", "wb") as stream:
image.save(stream)Etapa 5: Dispose a Imagem
Libere os recursos que o PsdImage carregado mantém quando terminar de usá-lo:
image.dispose()Problemas comuns e correções
RuntimeError: PsdImage has been disposed. ao chamar save. A imagem já foi descartada (via dispose() ou um with bloco que saiu) antes save foi chamado. Chame save antes de descartar.
PsdSaveException sobre o comprimento de uma string Pascal. Um valor de string excede 255 bytes — veja Manipulando Exceções do PSD Core and Troubleshooting.
Não há como forçar um contêiner PSD ou PSB ao salvar. Não existe um API público para escolher o formato do contêiner de saída — uma gravação sempre reflete o formato que (is_large_document / is_psb) o documento foi carregado. Se você precisar de um formato de contêiner diferente, não há caminho de conversão suportado nesta compilação FOSS.
Perguntas Frequentes
Salvar em um stream fecha o stream posteriormente?
Não — quando você passa um stream para save, o stream permanece aberto depois, permitindo que você controle seu ciclo de vida (veja a Etapa 4). Salvar em um caminho de arquivo, por contraste, abre e fecha o arquivo internamente.
Posso chamar o gravador interno de seção diretamente em vez de save?
Não — o gravador de nível de seção é um detalhe interno de implementação invocado por PsdImage.save. Não existe maneira documentada e suportada de escrever um documento fora da chamada a save em uma instância de PsdImage.