Автоматизируйте Photoshop для вставки текста из файла
-
22-08-2019 - |
Вопрос
У меня есть многоязычный веб-сайт, и мне нужно автоматизировать процесс обновления текстовых слоев в psd-файлах из csv-источника.
Я знаю, что в psp могут быть сбои из-за изменения ширины, но в любом случае было бы очень полезно иметь текст внутри документов.
Какие у меня есть варианты?
Редактировать:
У Murmelschlurmel есть рабочее решение.Вот ссылка на документацию Adobe.
Формат csv-файла не такой приятный:вам нужен столбец для каждой переменной.Я бы ожидал, что для каждой переменной будет строка.
Это работает с умлаутом (ä, ö и т.д.)
ПРАВКА 1:
Другое решение - использовать com для автоматизации Photoshop.Это хорошо, если у вас есть пара шаблонов (кнопок), которым нужен измененный текст.Вот мой скрипт на python, который может помочь вам начать работу.
У вас должен быть файл Excel со столбцами:TemplateFileName, TargetFileName, targetFormat, текст (т.Е. шаблон.psd, button1, gif, NiceButton) .Первый ряд листа не используется.Шаблон psp должен иметь только 1 textlayer и не может иметь layergroups.
import win32com.client
import xlrd
spreadsheet = xlrd.open_workbook("text_buttons.xls")
sheet = spreadsheet.sheet_by_index(0)
psApp = win32com.client.Dispatch("Photoshop.Application")
jpgSaveOptions = win32com.client.Dispatch("Photoshop.JPEGSaveOptions")
jpgSaveOptions.EmbedColorProfile = True
jpgSaveOptions.FormatOptions = 1
jpgSaveOptions.Matte = 1
jpgSaveOptions.Quality = 1
gifSaveOptions = win32com.client.Dispatch("Photoshop.GIFSaveOptions")
for rowIndex in range(sheet.nrows):
if(rowIndex > 0):
template = sheet.row(rowIndex)[0].value
targetFile = sheet.row(rowIndex)[1].value
targetFileFormat = sheet.row(rowIndex)[2].value
textTranslated = sheet.row(rowIndex)[3].value
psApp.Open(r"D:\Design\Produktion\%s" % template )
doc = psApp.Application.ActiveDocument
for layer in doc.Layers:
if (layer.Kind == 2):
layer.TextItem.Contents = textTranslated
if(targetFileFormat == "gif"):
doc.SaveAs(r"D:\Design\Produktion\de\%s" % targetFile, gifSaveOptions, True, 2)
if(targetFileFormat == "jpg"):
doc.SaveAs(r"D:\Design\Produktion\de\%s" % targetFile, jpgSaveOptions, True, 2)
Решение
Для этого вы можете использовать "Дизайн, основанный на данных".Существует также концепция дизайн, основанный на данных в информатике, но, насколько я могу судить, это никак не связано с использованием word в Photoshop.
Вот как действовать дальше:
Загрузите свое изображение в Photoshop и определите свои переменные с помощью Изображение> Переменная> Определить.
Затем преобразуйте ваш CSV-файл в формат, который может читать Photoshop.У меня был лучший опыт с текст, разделенный табуляцией.
Наконец, загрузите текстовый файл в Photoshop с помощью Изображения> Переменные> Набор данных и пусть Photoshop сохранит все итерации.
Когда я попробовал это в первый раз, я обнаружил, что файл справки Photoshop не содержит достаточно подробностей.Я поискал в Интернете photoshop "набор данных" и нашел несколько хороших руководств, напримерэтот из цифровые преподаватели.
Другие советы
Возможно, это немного перебор, но я использовал Adobe AlterCast / Grphics server для решения точно такой же проблемы.
Также, если это просто текстовое изображение в формате GIF / JPG, вы можете использовать Python + PIL (Python Imaging Library).Вот пример кода (работает в ОС Windows с установленными шрифтами Arial и Osaka).
#!/usr/bin/python
# -*- coding: utf-8 -*-
import ImageFont, ImageDraw, Image
#font = ImageFont.truetype("/usr/share/fonts/bitstream-vera/Vera.ttf", 24)
#font = ImageFont.truetype("futuratm.ttf", 18)
font = ImageFont.truetype("arial.ttf", 18)
im = Image.new("RGB", (365,20), "#fff")
draw = ImageDraw.Draw(im)
draw.text((0, 0), "Test Images", font=font, fill="#000")
im.save("TestImg_EN.gif", "GIF")
font = ImageFont.truetype("osaka.ttf", 18)
im = Image.new("RGB", (365,20), "#fff")
draw = ImageDraw.Draw(im)
draw.text((0, 0), u"テストイメージ", font=font, fill="#000")
im.save("TestImg_JP.gif", "GIF")