python 操作psd_Python PSD layers?

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 PIL, but there doesn't seem to be any method for accessing layers. Help.

PS. Writing my own PSD loader and png writer has shown to be way too slow.

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)]

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

You can use the win32com for accessing the Photoshop with Python.

Possible pseudo code for your work:

Load the PSD file

Collect all layers and make all layers VISIBLE=OFF

Turn one layer after another, mark them VISIBLE=ON and export to PNGimport 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)

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

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

来源:https://stackoverflow.com/questions/6759459/python-psd-layers

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值