मुझे एक PSD फ़ोटोशॉप छवि लोड करने के लिए एक पायथन प्रोग्राम लिखना होगा, जिसमें एकाधिक परतें हों और पीएनजी फाइलों को थूक दें (प्रत्येक परत के लिए एक)। क्या आप पाइथन में ऐसा कर सकते हैं? मैंने पीआईएल की कोशिश की है, लेकिन परतों तक पहुंचने के लिए कोई विधि नहीं प्रतीत होती है। मदद। पीएस। अपना खुद का PSD लोडर और पीएनजी लेखक लिखना बहुत धीमा दिख रहा है।पायथन PSD परतें?
उत्तर
गिंप-पायथन का प्रयोग करें? http://www.gimp.org/docs/python/index.html
आपको फ़ोटोशॉप की इस तरह की आवश्यकता नहीं है, और इसे किसी भी मंच पर काम करना चाहिए जो गिंप और पायथन चलाता है। यह एक बड़ी निर्भरता है, लेकिन एक मुफ़्त है।
जनहित याचिका में यह कर के लिए:
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 फ़ाइल से परतों को निकालने के लिए अनुमति देगा: ठीक है, समाधान नहीं मिला।
आप पायथन के साथ फ़ोटोशॉप तक पहुंचने के लिए win32com का उपयोग कर सकते हैं। अपने काम के लिए संभव छद्म कोड:
- लोड PSD फ़ाइल
- सभी परतों को एकत्र करें और सभी परतों को दृश्य बनाने के = बंद
- बारी एक के बाद एक परत, उन्हें गोचर निशान = पर और 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)
अजगर के लिए win32com प्लगइन (यहाँ उपलब्ध है: http://python.net/crew/mhammond/win32/) का उपयोग करना आप फ़ोटोशॉप का उपयोग कर सकते हैं और आसानी से अपने परतों के माध्यम से जाने के लिए और उन्हें निर्यात।
यहां एक कोड नमूना है जो वर्तमान में सक्रिय फ़ोटोशॉप दस्तावेज़ के भीतर परतों पर काम करता है, और उन्हें '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
भी https://code.google.com/p/pypsd/ और https://github.com/kmike/psd-tools PSD फ़ाइलें पढ़ने के लिए अजगर संकुल रहे हैं।
+1 'psdparse' के लिए +1! ऐसा लगता है कि ओपी को अपनी कार्यक्षमता को रोल करने की ज़रूरत नहीं है :) – rzetterberg
psdparse काम नहीं करता है। "चैनलों की असमर्थित संख्या" त्रुटि ... – Brock123
हमने विश्वास किया है कि हमने वहां के सभी विकल्पों को निकाला है, मुझे विश्वास है। आपको या तो खुद को रोल करना होगा, या गिंप-पायथन का उपयोग करना होगा। – agf