2009-03-31 6 views
7

Ich habe eine mehrsprachige Website und muss den Prozess der Aktualisierung von Textlayern in PSD-Dateien von einer CSV-Quelle automatisieren.Photoshop automatisieren, um Text aus Datei einzufügen

Ich weiß, dass es in der PSP wegen geänderter Breiten Störungen geben könnte, aber es würde sowieso viel helfen, den Text in den Dokumenten zu haben.

Was sind meine Optionen?

EDIT:

Murmelschlurmel hat eine funktionierende Lösung. Hier ist der Link zur Adobe-Dokumentation.

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

Das Format der CSV-Datei ist nicht so schön: Sie müssen eine Spalte für jede Variable. Ich würde eine Reihe für jede Variable erwarten.

Es mit Umlaut arbeitet (ä, ö etc)

EDIT 1:

Eine andere Lösung ist com zu verwenden Photoshop zu automatisieren. Das ist nett, wenn Sie ein paar Vorlagen (Schaltflächen) haben, die geänderten Text benötigen. Hier ist mein Skript in Python, mit dem Sie beginnen können.

Sie müssen sich mit Spalten einer Excel-Datei haben: TemplateFileName, TargetFileName, Targetformat, Text (dh template.psd, button1, gif, NiceButton). Die erste Zeile des Blattes wird nicht verwendet. Die PSP-Vorlage sollte nur 1 Textlayer haben und keine Layergruppen haben.

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) 

Antwort

21

Sie können "Data Driven Design", dies zu tun. Es gibt auch ein Konzept von data driven design in der Informatik, aber soweit ich sehen kann, ist dies nicht mit der Verwendung des Wortes in Photoshop verbunden.

Hier ist, wie es weitergeht:

Legen Sie das Bild in Photoshop und Ihre Variablen mit Bild definieren> Variable> definieren.

konvertieren Sie dann Ihre csv in ein Format Photoshop lesen kann. Ich hatte die besten Erfahrungen mit Tab-Text.

Laden Sie schließlich die Textdatei in Photoshop mit Bilder> Variablen> Datensatz und lassen Sie Photoshop alle Iterationen speichern.

Wenn habe ich versucht, diese erste, fand ich, dass die Photoshop-Hilfedatei genug Details nicht geben. Ich suchte im Internet für photoshop „Datensatz“ und fand einige gute Tutorials, z.B. dieses von digitaltutors.

+1

Ich fand dieses Video auch hilfreich: http://www.youtube.com/watch?v=i9Ms34nYRFI –

+1

Tutorial über datengesteuertes Design: http://roderickvella.wordpress.com/2014/12/30/photoshop-data -gesteuerte Grafik / – Vince

1

Es könnte aus wenig zu viel, aber ich habe Adobe Altercast/Grphics Server genau gleiches Problem zu behandeln.

Auch wenn es nur Text GIF/JPG Bild ist, können Sie Python + PIL (Python Imaging Library) verwenden. Hier ist ein Beispielcode (funktioniert unter Windows OS mit Arial und Osaka installierten Schriftarten.)

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

Das klang wie die perfekte Lösung. Aber das Produkt wird eingestellt. (Nachname war Adobe Graphics Server - http://www.adobe.com/products/server/graphics/). Bildverarbeitung ist für mich nicht machbar, weil ich PSP - spezifische Effekte habe. –