2009-03-31 16 views
7

Tengo un sitio web multilenguaje y necesito automatizar el proceso de actualización de textlayers en archivos psd desde una fuente csv.Automatice Photoshop para insertar texto desde el archivo

Sé que podría haber fallas en la psp debido a los anchos modificados, pero de todos modos sería útil tener el texto dentro de los documentos.

¿Cuáles son mis opciones?

EDIT:

Murmelschlurmel tiene una solución de trabajo. Aquí está el enlace a la documentación de Adobe.

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

El formato del archivo csv no es tan agradable: se necesita una columna para cada variable. Esperaría una fila para cada variable.

Funciona con diéresis (ä, ö, etc)

EDIT 1:

Otra solución es utilizar com para automatizar Photoshop. Eso es bueno si tienes un par de plantillas (botones) que necesitan un cambio de texto. Aquí está mi script en python que podría ayudarte a empezar.

Es necesario tener un archivo de Excel con columnas: TemplateFileName, TargetFileName, TargetFormat, texto (es decir template.psd, el botón 1, gif, NiceButton). La primera fila de la hoja no se utiliza. La plantilla de psp solo debe tener 1 textlayer y no puede tener grupos de capas.

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) 

Respuesta

21

Puede utilizar "Driven Design datos" para hacer esto. También hay un concepto de data driven design en ciencias de la computación, pero por lo que puedo ver, esto no está relacionado con el uso de la palabra en Photoshop.

Aquí es cómo proceder:

carga su imagen en Photoshop y definir las variables con Imagen> Variable> Definir.

Luego convierta su csv a un formato que Photoshop pueda leer. Tuve las mejores experiencias con texto delimitado por tabulaciones.

Finalmente cargue el archivo de texto en Photoshop con Imágenes> Variables> Conjunto de datos y deje que Photoshop guarde todas las iteraciones.

Cuando probé esto primero, descubrí que el archivo de ayuda de Photoshop no proporcionaba suficientes detalles. Busqué en Internet photoshop "data set" y encontré algunos buenos tutoriales, p. este de digitaltutors.

+1

También he encontrado útil este video: http://www.youtube.com/watch?v=i9Ms34nYRFI –

+1

tutorial sobre los datos de diseño impulsado: http://roderickvella.wordpress.com/2014/12/30/photoshop-data -driven-graphics / – Vince

1

Podría ser poco fuera demasiado, pero he utilizado servidor de Adobe AlterCast/Grphics para manejar exactamente el mismo problema.

Además, si solo se trata de una imagen Text GIF/JPG, puede utilizar Python + PIL (Biblioteca de imágenes de Python). Aquí es un ejemplo de código (funciona en el sistema operativo Windows con fuentes Arial y 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") 
+0

Esto sonaba como la solución perfecta. Pero el producto se descontinúa. (el apellido fue Adobe Graphics Server - http://www.adobe.com/products/server/graphics/). El procesamiento de la imagen no es factible para mí, porque identifiqué efec- tos específicos de PSP. –

Cuestiones relacionadas