Python PSD layers?

前端 未结 5 1364
野的像风
野的像风 2021-02-03 14:39

I need to write a Python program for loading a PSD photoshop image, which has multiple layers and spit out png files (one for each layer). Can you do that in Python? I\'ve tried

相关标签:
5条回答
  • 2021-02-03 15:22

    Using the win32com plugin for python (available here: http://python.net/crew/mhammond/win32/) You can access photoshop and easily go through your layers and export them.

    Here is a code sample that works on the layers within the currently active Photoshop document, and exports them into the folder defined in '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 讨论(0)
  • 2021-02-03 15:26

    There are also https://code.google.com/p/pypsd/ and https://github.com/kmike/psd-tools Python packages for reading PSD files.

    0 讨论(0)
  • 2021-02-03 15:26

    Use psd_tools in 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")
    
    0 讨论(0)
  • 2021-02-03 15:37

    You can use the win32com for accessing the Photoshop with Python. Possible pseudo code for your work:

    1. Load the PSD file
    2. Collect all layers and make all layers VISIBLE=OFF
    3. Turn one layer after another, mark them VISIBLE=ON and export to 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)
    
    
    0 讨论(0)
  • 2021-02-03 15:38

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

    You don't need Photoshop that way, and it should work on any platform that runs Gimp and Python. It's a large dependency, but a free one.

    For doing it in PIL:

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

    Edit: OK, found the solution: https://github.com/jerem/psdparse

    This will allow you to extract layers from a psd file with python without any non-python stuff.

    0 讨论(0)
提交回复
热议问题