У меня многоязычный веб-сайт, и мне нужно автоматизировать процесс обновления текстовых слоев в psd-файлах из csv-источника.
Я знаю, что в psp могут быть сбои из-за изменения ширины, но в любом случае очень помогло бы поместить текст в документы.
Какие у меня варианты?
EDIT:
У Murmelschlurmel есть рабочее решение. Вот ссылка на документацию Adobe.
http://livedocs.adobe.com/en_US/Photoshop/10.0/help.html?content=WSfd1234e1c4b69f30ea53e41001031ab64-740d.html
Формат csv-файла не так хорош: вам нужен столбец для каждой переменной. Я ожидал бы строку для каждой переменной.
Работает с Umlaut (ä, ö и т. Д.)
РЕДАКТИРОВАТЬ 1:
Другое решение - использовать com для автоматизации Photoshop. Это хорошо, если у вас есть несколько шаблонов (кнопок), которые требуют изменения текста. Вот мой скрипт на python, который может дать вам старт.
Вам нужен файл Excel со столбцами:
TemplateFileName, TargetFileName, TargetFormat, Text
(т.е. template.psd, button1, gif, NiceButton).
Первый ряд листа не используется.
Шаблон psp должен иметь только 1 текстовый слой и не может иметь группы слоев.
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)