Как преобразовать PSD в PNG, используя Python Wand / ImageMagick?

Я попытался преобразовать PSD в PNG, но когда я сохраняю PNG, Wand (wand-0.4.0-py2.7) выплевывает все слои внутри PSD в виде отдельных файлов PNG (последний сохраненный файл — это тот, который я хочу). Итак, как правильно конвертировать из PSD в PNG?

# Convert a large PSD to small PNG thumbnail
myImage = Image(filename="test.psd")
myImage.resize(100, 100)
myImage.format = "png"
myImage.save(filename="test.png")

найдено связанное решение:

но не уверен, как это можно сделать в Python (я новичок в Python)

Любая помощь приветствуется.


person urway    schedule 24.02.2015    source источник


Ответы (1)


Это будет работать просто хорошо и быстро как для чтения, так и для записи:

# Convert a large PSD to small PNG thumbnail
myImage = Image(filename="test.psd[0]")
myImage.format = "png"
myImage.sample(100, 100)
myImage.save(filename="test.png")

Потому что Wand читает только 1 слой вместо всех слоев внутри PSD.

  • ключ должен добавить [0] к строке имени файла.
  • после тестирования [0] получит окончательное составное изображение из PSD.
  • и все остальные числа, похоже, не имеют четкого представления о том, какие слои они представляют. в моем случае [1] — это 2-й слой снизу, а [2] — 3-й и т. д., поэтому, вероятно, лучше не извлекать слои таким образом.

Для более сложных операций с PSD-файлами вы можете использовать psd-инструменты Python (https://pypi.python.org/pypi/psd-tools). но из моего первоначального тестирования он читает PSD довольно медленно (может быть, потому, что он читает весь PSD).


Дополнительное приложение с Qt

Это было бы полезно, если вы хотите загрузить PSD (или другие форматы изображений) в пользовательский интерфейс Qt. Идея состоит в том, чтобы преобразовать изображение, загруженное Wand, в строку изображения и отправить эту строку изображения в QImage.

# load the image first
myImage = Image(filename=r"c:\test.psd[0]")
myImage.format = "png"
myImage.sample(100, 100)
aBlob = myImage.make_blob()

# load the image data into QImage
myQImage = QtGui.QImage.fromData( aBlob )
myQPixmap = QtGui.QPixmap.fromImage( myQImage )
target_QLabel.setPixmap( myQPixmap )
person urway    schedule 24.02.2015