Редактирование текстовых слоев Photoshop PSD программным способом
Вопрос
У меня есть многослойный PSD-файл, причем один конкретный слой представляет собой нерастеризованный текст.Я пытаюсь придумать, как я могу, с помощью программы bash / perl / python / какой угодно другой:
- загрузите PSD-файл
- отредактируйте текст в указанном слое
- выровняйте все слои на изображении
- сохраните в удобном для интернета формате, например PNG или JPG
Я сразу же подумал о ImageMagick - Магия изображений, но я не думаю, что смогу отредактировать текстовый слой через мгновенные сообщения.Если я смогу выполнить первые два шага каким-либо другим программным способом, я всегда могу использовать ImageMagick для выполнения последних двух шагов.
После пары часов поиска в Google и CPAN и PyPI я по-прежнему не нашел ничего многообещающего.У кого-нибудь есть совет или идеи по этому поводу?
Решение
Если вам не нравится использовать официально поддерживаемые AppleScript, JavaScript или VBScript, то есть также возможность сделать это на Python.Об этом рассказывается в статье Создание сценариев Photoshop с помощью Python, который опирается на COM-интерфейс Photoshop.
Я еще не пробовал это, так что на случай, если у вас это не сработает:Если ваш текст будет сохранен после преобразование в SVG затем вы можете просто заменить его любым инструментом, который вам нравится.После этого преобразуйте его в формат PNG (например.Автор: inkscape --export-png=...
).
Другие советы
Рассматривали ли вы возможность открытия и редактирования изображения в GIMP?Он имеет очень хорошую поддержку PSD и может быть написан на нескольких языках.
Какой из них вы используете, частично зависит от вашей платформы, интерфейс Perl, насколько мне известно, в Windows не работал.Я считаю, что схема поддерживается во всех портах.
Единственный способ, который я могу придумать для автоматизации изменения текста внутри PSD, - это использовать замену на основе регулярных выражений.
- Создайте очень простую картинку в Photoshop, возможно, с белым фоном и текстовым слоем, причем текст должен быть известной длины.
- Найдите нужный текст в файле и с помощью шестнадцатеричного редактора найдите поблизости длину текста (который может быть частью формата файла, а может и не быть).
- Попробуйте изменить текст, сначала на строку такой же длины, затем на что-то более короткое / длинное.
- Открывайте в Photoshop после каждого изменения, чтобы проверить, не поврежден ли файл.
Этот метод, если он жизнеспособен, будет работать только в том случае, если рассматриваемый слой содержит известную строку, которая может быть заменена вашим другим значением.Обратите внимание, что я понятия не имею, сработает ли это, поскольку у меня нет Photoshop на этом компьютере, чтобы опробовать этот метод.Может быть, вы сможете заставить это сработать?
Что касается конвертации в png, я в растерянности.Если заменяющий скрипт написан на Python, вы можете сделать это с помощью библиотеки изображений Python (PIL, что, кажется, подтверждает это), но в противном случае вам, возможно, придется просто открыть Photoshop, чтобы выполнить преобразование.Это означает, что, вероятно, вообще не стоило бы менять текст прагматично.
Вы можете использовать сам Photoshop, чтобы сделать это с помощью OLE.Конечно, вам нужно будет установить Photoshop.Win32:: OLE в Perl или аналогичном модуле в Python.Видишь http://www.adobe.com/devnet/photoshop/pdfs/PhotoshopScriptingGuide.pdf
Если вы собираетесь автоматизировать Photoshop, вам в значительной степени придется использовать собственные скриптовые системы Photoshop.Я не думаю, что есть какой-то способ обойти это.
Рассматривая проблему с другой стороны, можете ли вы экспортировать из Photoshop в какой-либо другой формат, поддерживающий слои, например PNG, который можно редактировать с помощью ImageMagick?
Вы также можете попробовать это с помощью Node.js.Я сделал Инструмент командной строки PSD
Установка однострочной командой (требуется установить NodeJS/ NPM)
npm install -g psd-cli
Затем вы можете использовать его, набрав в своем терминале
psd myfile.psd -t
Вы можете проверить код, чтобы использовать его из другого скрипта узла, или использовать его через свою оболочку из другого скрипта Bash / Perl / любого другого.