Слои Python PSD? - PullRequest
       41

Слои Python PSD?

6 голосов
/ 20 июля 2011

Мне нужно написать программу на Python для загрузки изображения фотошопа PSD, которое имеет несколько слоев и выкладывает png-файлы (по одному для каждого слоя).Вы можете сделать это на Python?Я пробовал PIL, но, похоже, нет никакого способа для доступа к слоям.Помогите.PS.Написание моего собственного загрузчика PSD и png Writer показалось слишком медленным.

Ответы [ 5 ]

5 голосов
/ 20 июля 2011

Использовать 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)]

Редактировать: ОК, найдено решение: https://github.com/jerem/psdparse

Это будетпозволяет извлекать слои из файла psd с помощью python без каких-либо не-python вещей.

2 голосов
/ 12 сентября 2011

Вы можете использовать win32com для доступа к Photoshop с помощью Python.Возможный псевдокод для вашей работы:

  1. Загрузите PSD-файл
  2. Соберите все слои и сделайте все слои VISIBLE = OFF
  3. Поверните один слой за другим, отметьте ихVISIBLE = 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)

1 голос
/ 03 ноября 2012

Существуют также https://code.google.com/p/pypsd/ и https://github.com/kmike/psd-tools пакеты Python для чтения PSD-файлов.

1 голос
/ 04 апреля 2012

Использование плагина 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
0 голосов
/ 13 июня 2019

Использование psd_tools в Python

from psd_tools import PSDImage

psd_name = "your_name"
x = 0
psd = PSDImage.open('your_file.psd')

for layer in psd:
    x+=1
    if layer.kind == "smartobject":
        image.conmpose().save(psd_name + str(x) + "png")
...