自动 Photoshop 从文件插入文本

发布于 2024-07-16 12:24:58 字数 2076 浏览 5 评论 0原文

我有一个多语言网站,需要自动执行从 csv 源更新 psd 文件中文本图层的过程。

我知道由于宽度的变化,psp 中可能会出现故障,但无论如何,将文本放在文档中会有很大帮助。

我有什么选择?

编辑:

Murmelschlurmel 有一个可行的解决方案。 这是 Adob​​e 文档的链接。

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

csv 文件的格式不太好:每个变量都需要一列。 我希望每个变量都有一行。

它与 Umlaut(ä、ö 等)配合使用

编辑 1:

另一个解决方案是使用 com 来自动化 Photoshop。 如果您有几个需要更改文本的模板(按钮),那就太好了。 这是我的 python 脚本,可能会让您入门。

您需要有一个包含以下列的 Excel 文件: 模板文件名、目标文件名、目标格式、文本 (即 template.psd、button1、gif、NiceButton)。 不使用工作表的第一行。 psp 模板只能有 1 个文本图层,并且不能有图层组。

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)

I have a multilanguage website and need automate the process of updating textlayers in psd-files from a csv-source.

I know that there might be glitches in the psp because of changed widths, but anyway it would help a lot to have the text inside the documents.

What are my options?

EDIT:

Murmelschlurmel has a working solution. Here is the link to the Adobe documentation.

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

The format of the csv-file is not so nice: you need a column for each variable. I would expect a row for each variable.

It works with Umlaut (ä, ö etc)

EDIT 1:

Another solution is to use com to automate Photoshop. Thats nice if you have a couple of templates (buttons) that need changed text. Here is my script in python that might get you startet.

You need to have an excel file with columns:
TemplateFileName, TargetFileName, TargetFormat, Text
(ie template.psd, button1 , gif , NiceButton) .
The first row of the sheet is not used.
The psp template should only have 1 textlayer and can not have 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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柠檬 2024-07-23 12:24:59

您可以使用“数据驱动设计”来做到这一点。 计算机科学中还有一个数据驱动设计的概念,但据我所知看来这与Photoshop中这个词的使用不无关系。

操作方法如下:

在 Photoshop 中加载图像并使用 Image > 定义变量。 变量> 定义。

然后将 csv 转换为 Photoshop 可以读取的格式。 我在制表符分隔文本方面获得了最佳体验。

最后在 Photoshop 中使用图像>加载文本文件。 变量> 数据集并让 Photoshop 保存所有迭代。

当我第一次尝试时,我发现 Photoshop 帮助文件没有提供足够的详细信息。 我在互联网上搜索了 photoshop“数据集” 并找到了一些很好的教程,例如来自 数字导师

You can use "Data Driven Design" to do this. There is also a concept of data driven design in computer science, but as far as I can see this is not not related to the use of the word in Photoshop.

Here is how to proceed:

Load your image in Photoshop and define your variables with Image > Variable > Define.

Then convert your csv to a format Photoshop can read. I had the best experiences with tab delimted text.

Finally load the text file in Photoshop with Images > Variables > Data Set and let Photoshop save all iterations.

When I tried this first, I found that the Photoshop help file didn't provide enough details. I searched the Internet for photoshop "data set" and found some good tutorials, e.g. this one from digitaltutors.

以酷 2024-07-23 12:24:59

它可能有点偏离太多,但我已经使用 Adob​​e AlterCast/Grphics 服务器来处理完全相同的问题。

另外,如果只是文本 GIF/JPG 图像,您可以使用 Python+PIL(Python 图像库)。
以下是示例代码(适用于安装了 Arial 和 Osaka 字体的 Windows 操作系统。)

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

It might be little bit off too much, but I have used Adobe AlterCast/Grphics server to handle exactly same issue.

Also if its just Text GIF/JPG image, you can use Python+PIL (Python Imaging Library).
Here is a sample code (works on Windows OS with Arial and Osaka fonts installed.)

#!/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")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文