2011-07-20 12 views
6

मुझे एक PSD फ़ोटोशॉप छवि लोड करने के लिए एक पायथन प्रोग्राम लिखना होगा, जिसमें एकाधिक परतें हों और पीएनजी फाइलों को थूक दें (प्रत्येक परत के लिए एक)। क्या आप पाइथन में ऐसा कर सकते हैं? मैंने पीआईएल की कोशिश की है, लेकिन परतों तक पहुंचने के लिए कोई विधि नहीं प्रतीत होती है। मदद। पीएस। अपना खुद का PSD लोडर और पीएनजी लेखक लिखना बहुत धीमा दिख रहा है।पायथन PSD परतें?

उत्तर

5

गिंप-पायथन का प्रयोग करें? 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 फ़ाइल से परतों को निकालने के लिए अनुमति देगा: ठीक है, समाधान नहीं मिला।

+0

+1 'psdparse' के लिए +1! ऐसा लगता है कि ओपी को अपनी कार्यक्षमता को रोल करने की ज़रूरत नहीं है :) – rzetterberg

+0

psdparse काम नहीं करता है। "चैनलों की असमर्थित संख्या" त्रुटि ... – Brock123

+1

हमने विश्वास किया है कि हमने वहां के सभी विकल्पों को निकाला है, मुझे विश्वास है। आपको या तो खुद को रोल करना होगा, या गिंप-पायथन का उपयोग करना होगा। – agf

2

आप पायथन के साथ फ़ोटोशॉप तक पहुंचने के लिए win32com का उपयोग कर सकते हैं। अपने काम के लिए संभव छद्म कोड:

  1. लोड PSD फ़ाइल
  2. सभी परतों को एकत्र करें और सभी परतों को दृश्य बनाने के = बंद
  3. बारी एक के बाद एक परत, उन्हें गोचर निशान = पर और PNG
  4. के लिए निर्यात
 

    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

अजगर के लिए 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 
संबंधित मुद्दे