Python PSD 图层?

7 投票
6 回答
17807 浏览
提问于 2025-04-16 21:54

我需要写一个Python程序,用来加载一个PSD格式的Photoshop图片,这种图片有很多层,然后把每一层分别保存成png文件。 请问在Python中可以做到吗?我试过用PIL库,但好像没有办法访问到这些层。求助。 另外,自己写一个PSD加载器和png写入器的速度太慢了。

6 个回答

1

你可以使用win32com这个工具,通过Python来访问Photoshop。

下面是你可以参考的伪代码:

  1. 加载PSD文件
  2. 获取所有图层,并把所有图层的可见性设置为关闭
  3. 逐个打开每个图层,把它们的可见性设置为开启,然后导出为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)

3

在Python中使用psd_tools

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")
5

想用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

这个工具可以让你用Python从psd文件中提取图层,不需要用其他语言的东西。

撰写回答