Automatizar o Photoshop para inserir texto de arquivo
-
22-08-2019 - |
Pergunta
Eu tenho um site em vários idiomas e precisa automatizar o processo de atualização textlayers em PSD-arquivos a partir de um arquivo CSV-fonte.
Eu sei que pode haver falhas no psp por causa de larguras mudado, mas de qualquer maneira ele iria ajudar muito para ter o texto dentro dos documentos.
Quais são as minhas opções?
EDIT:
Murmelschlurmel tem uma solução de trabalho. Aqui está o link para a documentação Adobe.
O formato do arquivo CSV não é tão bom: você precisa de uma coluna para cada variável. Eu esperaria uma linha para cada variável.
Ele funciona com trema (ä, ö etc)
EDIT 1:
Outra solução é usar com automatizar Photoshop. Isso é bom se você tem um par de modelos (botões) que precisam texto alterado. Aqui está o meu script em python que pode levá-lo startet.
Você precisa ter um arquivo do Excel com colunas: TEMPLATEfilename, TargetFileName, TargetFormat, Texto (Ou seja, template.psd, botão1, gif, NiceButton). A primeira linha da folha não é utilizado. O modelo de PSP deve ter apenas 1 textlayer e não pode ter 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)
Solução
Você pode usar "Data Driven Design" para fazer isso. Há também um conceito de dados orientado projeto em ciência da computação, mas tanto quanto eu puder ver este não é não relacionada ao uso da palavra em Photoshop.
Aqui está como proceder:
Coloque sua imagem no Photoshop e definir suas variáveis ??com Imagem> Variáveis> Definir .
Em seguida, converter seu CSV para um formato Photoshop pode ler. Eu tive as melhores experiências com guia delimted texto .
Finalmente carregar o arquivo de texto no Photoshop com imagens> Variáveis> conjunto de dados e deixar Photoshop salvar todas as iterações.
Quando eu tentei isso em primeiro lugar, eu achei que o arquivo de ajuda do Photoshop não forneceu detalhes suficientes. Eu procurei na Internet para photoshop "conjunto de dados" e encontrei alguns bons tutoriais, por exemplo, esta de digitaltutors .
Outras dicas
Pode ser pouco fora muito, mas eu tenho usado servidor Adobe AlterCast / Grphics para lidar com exatamente o mesmo problema.
Além disso, se sua imagem GIF / JPG apenas texto, você pode usar Python + PIL (Python Imaging Library). Aqui está um exemplo de código (funciona no Windows OS com fontes Arial e Osaka instalados.)
#!/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")