2011-07-20 12 views
6

Necesito escribir un programa de Python para cargar una imagen de PSD Photoshop, que tiene varias capas y escupir archivos png (uno para cada capa). ¿Puedes hacer eso en Python? He intentado con PIL, pero no parece haber ningún método para acceder a las capas. Ayuda. PS. Escribir mi propio cargador PSD y el escritor png ha demostrado ser demasiado lento.Capas Python PSD?

Respuesta

5

Usar Gimp-Python? http://www.gimp.org/docs/python/index.html

No necesita Photoshop de esa manera, y debería funcionar en cualquier plataforma que ejecute Gimp y Python. Es una gran dependencia, pero gratuita.

Para hacerlo en PIL:

from PIL import Image, ImageSequence 
im = Image.open("spam.psd") 
layers = [frame.copy() for frame in ImageSequence.Iterator(im)] 

Editar: OK, encontrado la solución: https://github.com/jerem/psdparse

Esto le permitirá extraer capas de un archivo PSD con el pitón sin ningún tipo de material no pitón.

+0

+1 Para 'psdparse'! Parece que OP no tiene que rodar su propia funcionalidad :) – rzetterberg

+0

psdparse no funciona. Error "No admitido número de canales" ... – Brock123

+1

Hemos agotado todas las opciones que hay, creo. Tendrás que hacer tu propio, o usar Gimp-Python. – agf

2

Puede usar el win32com para acceder al Photoshop con Python. Posible pseudo código para su trabajo:

  1. carga el archivo PSD
  2. Recoge todas las capas y crea todas las capas visibles = OFF
  3. Encienda una capa tras otra, marcarlos VISIBLE = ON y exportación a 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

Usando el plugin win32com para Python (disponible aquí: http://python.net/crew/mhammond/win32/) puede acceder a photoshop y pasar fácilmente a través de sus capas y exportarlos.

Aquí hay un ejemplo de código que funciona en las capas dentro del documento de Photoshop actualmente activo, y las exporta a la carpeta definida en 'ubicación_de_guarda'.

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 
Cuestiones relacionadas