Автоматизируйте Photoshop для вставки текста из файла

StackOverflow https://stackoverflow.com/questions/700792

  •  22-08-2019
  •  | 
  •  

Вопрос

У меня есть многоязычный веб-сайт, и мне нужно автоматизировать процесс обновления текстовых слоев в psd-файлах из csv-источника.

Я знаю, что в psp могут быть сбои из-за изменения ширины, но в любом случае было бы очень полезно иметь текст внутри документов.

Какие у меня есть варианты?

Редактировать:

У Murmelschlurmel есть рабочее решение.Вот ссылка на документацию Adobe.

http://livedocs.adobe.com/en_US/Photoshop/10.0/help.html?content=WSfd1234e1c4b69f30ea53e41001031ab64-740d.html

Формат 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")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top