Слои PSD Python?
Мне нужно написать программу Python для загрузки изображения PSD photoshop, которое имеет несколько слоев и выплевывает png-файлы (по одному для каждого слоя). Вы можете сделать это в Python? Я пробовал PIL, но, похоже, нет никакого метода для доступа к слоям. Помощь. ПС. Написание моего собственного загрузчика PSD и PNG writer оказалось слишком медленным.
4 ответов
Использовать Gimp-Python? http://www.gimp.org/docs/python/index.html
вам не нужен Photoshop таким образом, и он должен работать на любой платформе, на которой работают Gimp и Python. Это большая зависимость, но свободная.
для этого в PIL:
from PIL import Image, ImageSequence
im = Image.open("spam.psd")
layers = [frame.copy() for frame in ImageSequence.Iterator(im)]
Edit: OK, найдено решение:https://github.com/jerem/psdparse
Это позволит вам извлекать слои из psd-файла с python без каких-либо не-python материал.
вы можете использовать win32com для доступа к Photoshop с помощью Python. Возможный псевдо-код для вашей работы:
- загрузите файл PSD
- соберите все слои и сделайте все слои видимыми=OFF
- Поверните один слой за другим, отметьте их видимыми=ON и экспортируйте в PNG
import win32com.client pApp = win32com.client.Dispatch('Photoshop.Application') def makeAllLayerInvisible(lyrs): for ly in lyrs: ly.Visible = False def makeEachLayerVisibleAndExportToPNG(lyrs): for ly in lyrs: ly.Visible = True options = win32com.client.Dispatch('Photoshop.PNGSaveOptions') options.Interlaced = False tf = 'PNG file name with path' doc.SaveAs(SaveIn=tf,Options=options) ly.Visible = False #pApp.Open(PSD file) doc = pApp.ActiveDocument makeAllLayerInvisible(doc.Layers) makeEachLayerVisibleAndExportToPNG(doc.Layers)
использование плагина win32com для python (доступно здесь:http://python.net/crew/mhammond/win32/) Вы можете получить доступ к photoshop и легко пройти через слои и экспортировать их.
вот пример кода, который работает со слоями в текущем активном документе Photoshop и экспортирует их в папку, определенную в "save_location".
from win32com.client.dynamic import Dispatch
#Save location
save_location = 'c:\temp\'
#call photoshop
psApp = Dispatch('Photoshop.Application')
options = Dispatch('Photoshop.ExportOptionsSaveForWeb')
options.Format = 13 # PNG
options.PNG8 = False # Sets it to PNG-24 bit
doc = psApp.activeDocument
#Hide the layers so that they don't get in the way when exporting
for layer in doc.layers:
layer.Visible = False
#Now go through one at a time and export each layer
for layer in doc.layers:
#build the filename
savefile = save_location + layer.name + '.png'
print 'Exporting', savefile
#Set the current layer to be visible
layer.visible = True
#Export the layer
doc.Export(ExportIn=savefile, ExportAs=2, Options=options)
#Set the layer to be invisible to make way for the next one
layer.visible = False
есть также https://code.google.com/p/pypsd/ и https://github.com/kmike/psd-tools пакеты Python для чтения PSD-файлов.