2009-03-31 16 views
7

Ho un sito Web in più lingue e ho bisogno di automatizzare il processo di aggiornamento dei file di testo nei file psd da un csv-source.Automatizza Photoshop per inserire il testo dal file

So che potrebbero esserci problemi nella psp a causa delle larghezze modificate, ma in ogni caso sarebbe di grande aiuto avere il testo all'interno dei documenti.

Quali sono le mie opzioni?

EDIT:

Murmelschlurmel ha una soluzione di lavoro. Ecco il link alla documentazione di Adobe.

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

Il formato del file CSV non è così bello: hai bisogno di una colonna per ogni variabile. Mi aspetterei una riga per ogni variabile.

Funziona con Umlaut (ä, ö ecc)

EDIT 1:

Un'altra soluzione è quella di utilizzare COM per automatizzare Photoshop. È bello se hai un paio di modelli (pulsanti) che hanno bisogno di testo cambiato. Ecco il mio script in Python che potrebbe farti iniziare.

È necessario disporre di un file Excel con colonne: TemplateFileName, TargetFileName, TargetFormat, Testo (cioè template.psd, button1, gif, NiceButton). La prima riga del foglio non viene utilizzata. Il modello psp dovrebbe avere solo 1 testo e non può avere gruppi di lavoro.

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) 

risposta

21

È possibile utilizzare "Data Driven Design" per fare questo. C'è anche un concetto di data driven design in informatica, ma per quanto posso vedere questo non è legato all'utilizzo della parola in Photoshop.

Ecco come procedere:

Caricare l'immagine in Photoshop e definire le variabili con Immagine> Variabile> Definisci.

Quindi converti il ​​tuo csv in un formato che Photoshop può leggere. Ho avuto le migliori esperienze con il testo delimitato da tab .

Infine caricare il file di testo in Photoshop con Immagini> Variabili> Set di dati e lasciare che Photoshop salvi tutte le iterazioni.

Quando ho provato prima questo, ho trovato che il file della guida di Photoshop non forniva dettagli sufficienti. Ho cercato su Internet il photoshop "set di dati" e ho trovato alcuni buoni tutorial, ad es. questo da digitaltutors.

+1

Ho trovato anche questo video utile: http://www.youtube.com/watch?v=i9Ms34nYRFI –

+1

tutorial sulla progettazione guidata dai dati: http://roderickvella.wordpress.com/2014/12/30/photoshop-data -driven-graphics / – Vince

1

Potrebbe essere po 'fuori troppo, ma ho usato server di Adobe AlterCast/Grphics per gestire esattamente lo stesso problema.

Anche se è solo un'immagine GIF/JPG di testo, è possibile utilizzare Python + PIL (libreria di immagini Python). Ecco un esempio di codice (funziona su sistema operativo Windows con i caratteri Arial e Osaka installati.)

#!/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

Questo sembrava la soluzione perfetta. Ma il prodotto è fuori produzione. (il cognome era Adobe Graphics Server - http://www.adobe.com/products/server/graphics/). L'elaborazione delle immagini non è fattibile per me, perché utilizzo gli efetti specifici della PSP. –

Problemi correlati