2009-03-31 7 views
7

Tôi có một trang web đa ngôn ngữ và cần tự động hóa quá trình cập nhật các chương trình text trong các tệp psd từ một nguồn csv.Tự động hoá Photoshop để chèn văn bản từ tập tin

Tôi biết rằng có thể có trục trặc trong psp vì chiều rộng thay đổi, nhưng dù sao nó sẽ giúp rất nhiều để có văn bản bên trong tài liệu.

Tùy chọn của tôi là gì?

CHỈNH SỬA:

Murmelschlurmel có giải pháp làm việc. Đây là liên kết đến tài liệu Adobe.

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

Định dạng của csv file không phải là quá đẹp: bạn cần một cột cho mỗi biến. Tôi mong đợi một hàng cho mỗi biến.

Nó hoạt động với Umlaut (ä, ö vv)

EDIT 1:

Một giải pháp khác là sử dụng com để tự động Photoshop. Thats tốt đẹp nếu bạn có một vài mẫu (nút) cần văn bản thay đổi. Đây là kịch bản của tôi trong python mà có thể giúp bạn bắt đầu.

Bạn cần có tệp excel với các cột: TemplateFileName, TargetFileName, TargetFormat, văn bản (ví dụ: template.psd, button1, gif, NiceButton). Hàng đầu tiên của trang tính không được sử dụng. Mẫu psp chỉ nên có 1 textlayer và không thể có các nhóm.

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) 

Trả lời

21

Bạn có thể sử dụng "dữ liệu Thiết kế Driven" để làm điều này. Ngoài ra còn có một khái niệm về data driven design trong khoa học máy tính, nhưng theo như tôi có thể thấy điều này không liên quan đến việc sử dụng từ trong Photoshop.

Dưới đây là cách thức tiến hành:

Tải hình ảnh của bạn trong Photoshop và xác định các biến của bạn với Image> Biến> Define.

Sau đó chuyển đổi csv của bạn thành định dạng mà Photoshop có thể đọc. Tôi đã có những trải nghiệm tốt nhất với văn bản bị xóa tab.

Cuối cùng tải tệp văn bản trong Photoshop bằng Hình ảnh> Biến> Tập dữ liệu và để Photoshop lưu tất cả các lần lặp lại.

Khi tôi thử điều này trước, tôi thấy rằng tệp trợ giúp Photoshop không cung cấp đủ chi tiết. Tôi đã tìm kiếm trên Internet photoshop "tập hợp dữ liệu" và tìm thấy một số hướng dẫn hay, ví dụ: cái này từ digitaltutors.

+1

Tôi cũng thấy video này hữu ích: http://www.youtube.com/watch?v=i9Ms34nYRFI –

+1

hướng dẫn về thiết kế theo hướng dữ liệu: http://roderickvella.wordpress.com/2014/12/30/photoshop-data -driven-graphics / – Vince

1

Có thể hơi quá nhiều, nhưng tôi đã sử dụng máy chủ Adobe AlterCast/Grphics để xử lý chính xác cùng một vấn đề.

Ngoài ra nếu chỉ là hình ảnh GIF/JPG văn bản, bạn có thể sử dụng Python + PIL (Thư viện hình ảnh Python). Dưới đây là một số mẫu mã (chỉ hoạt động trên hệ điều hành Windows với phông chữ Arial và Osaka được cài đặt.)

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

Điều này nghe có vẻ giống như giải pháp hoàn hảo. Nhưng sản phẩm bị ngưng. (họ là Adobe Graphics Server - http://www.adobe.com/products/server/graphics/). Xử lý hình ảnh là không khả thi đối với tôi, bởi vì tôi nedd PSP - efects cụ thể. –