Potrzebuję napisać program w języku Python do ładowania obrazu PSD, który ma wiele warstw i wypluwa pliki png (po jednym dla każdej warstwy). Czy możesz to zrobić w Pythonie? Próbowałem PIL, ale wydaje się, że nie ma żadnej metody dostępu do warstw. Wsparcie. PS. Pisanie własnego programu ładującego PSD i programu png okazało się zbyt powolne.Python PSD layers?
Odpowiedz
Użyj Gimp-Python? http://www.gimp.org/docs/python/index.html
Nie potrzebujesz programu Photoshop w ten sposób i powinien działać na każdej platformie, na której działają Gimp i Python. To duża zależność, ale bezpłatna.
Dla robi to w PIL:
from PIL import Image, ImageSequence
im = Image.open("spam.psd")
layers = [frame.copy() for frame in ImageSequence.Iterator(im)]
Edit: Ok, znalazłem rozwiązanie: https://github.com/jerem/psdparse
pozwoli wyodrębnić warstwy z pliku PSD z pytona bez non-python rzeczy.
Możesz użyć win32com do uzyskania dostępu do Photoshopa za pomocą Pythona. Możliwa pseudo kod do pracy:
- Załaduj PSD
- Zbierz wszystkie warstwy i uczynić wszystkie warstwy Visible = OFF
- Włącz jedną warstwę po drugiej, oznaczyć je Visible = ON i eksport do 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)
Używanie wtyczki win32com dla Pythona (dostępny tutaj: http://python.net/crew/mhammond/win32/) można uzyskać dostęp do Photoshopa i łatwo przejść przez warstwy i eksportować je.
Oto przykład kodu, który działa na warstwach w ramach aktualnie aktywnego dokumentu programu Photoshop i eksportuje je do folderu zdefiniowanego w "lokalizacja_oszczędności".
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
Istnieją również https://code.google.com/p/pypsd/ i https://github.com/kmike/psd-tools pakiety Pythona do odczytu plików PSD.
- 1. batch eksport plików psd do png
- 2. Jak wyodrębnić tekst z pliku PSD?
- 3. Przechowywanie plików obrazów, plików psd, plików ai, flash w subversion
- 4. Konwertuj .psd i .ai do PNG/JPG z obrazkiem
- 5. Jak mogę odczytać plik psd za pomocą php
- 6. Czy istnieje sposób wyeksportować PSD za pomocą AS3
- 7. Wyodrębnianie obrazów z PSD do użytku w aplikacji iOS
- 8. Jak korzystać z zestawu UI (PSD) w aplikacji Android
- 9. jak poznać informacje o czcionce w pliku psd?
- 10. co to jest jednostka PSD przy użyciu metody FFT
- 11. jak obliczyć wysokość linii z pliku psd? (wiodący + rozmiar czcionki)
- 12. Python - Virtualenv, python 3?
- 13. Python generujący python
- 14. Python kontra Iron Python
- 15. Python python kategorię według kolumny
- 16. python 2.7 vs python 3.1
- 17. python 2.6 lub python 3.1?
- 18. Python * do zwiększenia :: python :: obiekt
- 19. Czyli? nagłówek ("P3P: CP =" IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi JEGO NASZ IND CNT "");
- 20. Python 2 i Python 3 __cmp__
- 21. Python skrypt exe na python 3.5
- 22. Python Sniffing z książki Black Hat Python
- 23. różnica między python 2.7.3 i python 3.3
- 24. Jak przedłużyć moduł python? (python-twitter)
- 25. Python - Jak wyciąć napis w języku Python?
- 26. Python time.sleep
- 27. Python functools.namedtuple
- 28. Python dziesiętny
- 29. Python Multiprocessing
- 30. Python + FastCGI
+1 Dla 'psdparse'! Wygląda na to, że OP nie musi uruchamiać swojej własnej funkcjonalności :) – rzetterberg
psdparse nie działa. Błąd "Nieobsługiwana liczba kanałów" ... – Brock123
Wydaje się, że wyewidencjonowaliśmy wszystkie opcje. Musisz albo rzucić własną, albo użyć Gimp-Pythona. – agf