问题 以编程方式编辑Photoshop PSD文本图层


我有一个多层PSD,其中一个特定图层是非光栅化文本。我试图找出一种方法,从bash / perl / python / whatever-else程序:

  1. 加载PSD
  2. 编辑所述图层中的文本
  3. 展平图像中的所有图层
  4. 保存为PNG或JPG等网络友好格式

我马上想到了 ImageMagick的,但我认为我不能通过IM编辑文本层。如果我可以通过其他一些编程方式完成前两个步骤,我总是可以使用ImageMagick执行最后两个步骤。

经过几个小时的谷歌搜索和搜索CPAN和PyPI后,我仍然没有找到任何有希望的东西。有没有人对这个问题有任何建议或想法?


11424
2018-05-12 02:27


起源

嗨@EvanK,你有解决方案吗?如果是的话请与我分享。 - rkaartikeyan


答案:


如果您不想使用官方支持的AppleScript,JavaScript或VBScript,那么也可以在Python中使用它。这在文章中解释 用Python编写Photoshop脚本,它依赖于Photoshop的COM界面。

我没有尝试过,所以万一它不适合你: 如果您的文字保留后 转换为SVG 然后你可以简单地用你喜欢的任何工具替换它。然后,将其转换为PNG(例如,通过 inkscape --export-png=...)。


6
2018-05-12 07:07



我想我会走这条路。除了PS的内置脚本之外,它似乎是最一致的选择(如果我没有弄错,必须从Photoshop中手动启动) - EvanK


您是否考虑过在GIMP中打开和编辑图像?它具有非常好的PSD支持,并且可以用多种语言编写脚本。

您使用哪一个部分取决于您的平台,Perl界面在我知道的最后一个版本上无法在Windows上运行。我相信所有端口都支持Scheme。


3
2018-05-12 08:12





我能想到的唯一可以自动更改PSD内部文本的方法是使用基于正则表达式的替换。

  1. 在Photoshop中创建一个非常简单的图片,可能是白色背景和文本图层,文本是已知长度。
  2. 在文件中搜索您的文本,并使用十六进制编辑器在附近搜索文本的长度(可能是也可能不是文件格式的一部分)。
  3. 尝试更改文本,首先更改为相同长度的字符串,然后更短/更长。
  4. 每次更改后在Photoshop中打开以查看文件是否已损坏。

此方法(如果可行)仅在相关图层包含已知字符串时才有效,该字符串可替换为您的其他值。请注意,我不知道这是否会起作用,因为我在这台计算机上没有Photoshop来尝试这种方法。也许你可以让它发挥作用?

至于转换为png,我很茫然。如果替换脚本是在Python中,您可以使用Python Imaging Library(PIL, 这似乎支持它),但否则你可能只需打开Photoshop进行转换。这意味着首先实际更改文本可能不值得。


3
2018-05-12 05:18



使用十六进制编辑的好主意,但不幸的是它似乎根本没有更改图层中的文本(如果我用不同长度的字符串替换它,它会破坏PSD文件)。 - EvanK


您可以使用Photoshop本身使用OLE执行此操作。当然,您需要安装Photoshop。 Perl中的Win32 :: OLE或Python中的类似模块。看到 http://www.adobe.com/devnet/photoshop/pdfs/PhotoshopScriptingGuide.pdf 


2
2018-05-12 10:35





如果你要自动化Photoshop,你几乎必须使用Photoshop自己的脚本系统。我不认为有办法解决这个问题。

以不同的方式查看问题,您可以从Photoshop导出到支持图层的其他格式,如PNG,可由ImageMagick编辑吗?


1
2018-05-12 03:01





您也可以使用Node.js尝试此操作。我制造了一个 PSD命令行工具

单行命令安装(需要安装NodeJS / NPM)

npm install -g psd-cli

然后,您可以通过键入终端来使用它

psd myfile.psd -t

您可以查看代码以从其他节点脚本使用它,或通过您的shell使用它来自另一个Bash / Perl /任何脚本。


1
2018-01-28 10:14



您好@kartsims此命令导出文本详细信息,但我们如何更改PSD文件中的文本? - rkaartikeyan
无法使用此lib,尝试PSD.js,它所基于的Node库。它有更多的功能 - kartsims