Programowa edycja warstw tekstowych Photoshop PSD

Mam wielowarstwowe PSD, z jedną konkretną warstwą to nie rasteryzowany tekst. Próbuję znaleźć sposób, w jaki mogę, z programu bash / perl / python / whatever-else:

  1. załaduj PSD
  2. edytuj tekst w warstwie
  3. spłaszczyć wszystkie warstwy na obrazie
  4. Zapisz jako format przyjazny dla sieci, taki jak PNG lub JPG

Od razu pomyślałem o ImageMagick , ale nie sądzę, żebym mógł edytować warstwę tekstową przez IM. Jeśli uda mi się osiągnąć dwa pierwsze kroki w inny sposób programowy, zawsze mogę użyć ImageMagick do wykonania dwóch ostatnich kroków.

Po kilku godzinach googlowania i przeszukiwania CPAN i PyPI, nadal nie znalazłem nic obiecującego. Czy ktoś ma rady lub pomysły na ten temat?

Author: EvanK, 2009-05-12

6 answers

Jeśli nie lubisz używać oficjalnie wspieranego AppleScript, JavaScript lub VBScript, istnieje również możliwość zrobienia tego w Pythonie. Jest to wyjaśnione w artykule Photoshop scripting with Python , który opiera się na interfejsie com Photoshopa.

Nie próbowałem, więc na wypadek, gdyby to nie działało dla Ciebie: Jeśli twój tekst zostanie zachowany po konwersji do SVG , możesz go po prostu zastąpić dowolnym narzędziem. Następnie przekonwertuj go do PNG (np. przez inkscape --export-png=...).

 6
Author: wr.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-12 07:07:47

Rozważałeś otwieranie i edycję obrazu w GIMP? Ma bardzo dobrą obsługę PSD i może być skryptowany w kilku językach.

To, którego używasz, zależy po części od twojej platformy, interfejs Perla nie działał na Windowsie ostatni raz, kiedy go znałem. Uważam, że program jest wspierany we wszystkich portach.

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-12 08:12:17

Jedynym sposobem automatyzacji zmiany tekstu wewnątrz PSD byłoby użycie substytucji opartej na regex.

  1. Utwórz bardzo prosty obraz w Photoshopie, być może białe tło i warstwę tekstową, z tekstem o znanej długości.
  2. Przeszukaj plik w poszukiwaniu tekstu, a za pomocą edytora szesnastkowego przeszukaj w pobliżu długość tekstu (który może, ale nie musi być częścią formatu pliku).
  3. Spróbuj zmienić tekst, najpierw na ciąg o tej samej długości, potem do czegoś krótszego/dłuższego.
  4. Otwórz w programie Photoshop po każdej zmianie, aby sprawdzić, czy plik jest uszkodzony.

Ta metoda, jeśli jest wykonalna, będzie działać tylko wtedy, gdy dana warstwa zawiera znany ciąg znaków, który można zastąpić inną wartością. Zauważ, że nie mam pojęcia, czy to zadziała, ponieważ nie mam Photoshopa na tym komputerze, aby wypróbować tę metodę. Może uda ci się?

Co do konwersji do png, to jestem w rozsypce. Jeśli skrypt zastępujący jest w Pythona, możesz to zrobić za pomocą biblioteki obrazowania Pythona (pil, , która wydaje się go wspierać ), ale w przeciwnym razie możesz po prostu otworzyć Photoshopa, aby wykonać konwersję. Co oznacza, że prawdopodobnie nie warto zmieniać tekstu pragmatycznie w pierwszej kolejności.

 3
Author: Nick Meharry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-11 17:15:58

Możesz użyć samego Photoshopa, aby to zrobić z OLE. Oczywiście musisz zainstalować Photoshopa. Win32:: OLE w Perlu lub podobnym module w Pythonie. Zobacz http://www.adobe.com/devnet/photoshop/pdfs/PhotoshopScriptingGuide.pdf

 2
Author: Alexandr Ciornii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-12 10:35:01

Jeśli zamierzasz zautomatyzować Photoshopa, musisz użyć własnych systemów skryptowych Photoshopa. Nie sądzę, żeby było na to wyjście.

Patrząc na problem w inny sposób, czy można eksportować z Photoshopa do innego formatu obsługującego warstwy, takiego jak PNG, który jest edytowalny przez ImageMagick?

 1
Author: AmbroseChapel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-12 03:01:50

Możesz również spróbować tego używając Node.js. Zrobiłem Narzędzie wiersza poleceń PSD

One-line Command install (wymaga zainstalowania NodeJS/npm)

npm install -g psd-cli

Możesz go użyć wpisując w terminalu

psd myfile.psd -t

Możesz sprawdzić kod, aby użyć go z innego skryptu węzła lub użyć go przez powłokę z innego skryptu Bash/Perl/whatever.

 1
Author: kartsims,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-28 10:14:20