使用命令行创建 "editable text" 的多层 psd 文件

Creating a multi layered psd file with "editable text" using command line

我正在尝试使用命令行 (linux/osx) 创建 PSD 文件。 例子: 我有 5 个文本块

"hello" "this" "is" "an" "example"

我需要一种方法来获取这 5 个文本块并生成一个 psd,每个文本块将有 5 个不同的图层,我需要在生成 psd 并在 photoshop 中打开它们后可以编辑它们。

你们熟悉可以做到这一点的软件吗?

我尝试了 GIMP 和 ImageMagick,我能够生成一个 5 层的 psd,其中包含文本块,但不幸的是,imageMagick 似乎将文本转换为实际图像,因此这使得文本在打开后不可编辑photoshop.

确实 - 大多数能够处理 PSD 图像的软件只能处理其中的一个子集。 GIMP 本身只会将文本 PSD 图层作为像素打开。

我对您的工作流程的提示是从 photoshop 内部编写脚本,并创建另一种带有文本标记的文件,该文件将在那里呈现。但是,通过命令行无法做到这一点 - (也许它可以通过 GUI 自动化工具实现自动化)。

啊 - 它让我震惊 - 也许你可以使用 SVG 文件格式,然后将其转换为 PSD(虽然转换仍然需要在 Photoshop 中进行手动交互 - 但也许 SVG 文件足够接近你可以直接将它发送给您的最终用户,而不是 PSD)

关于 SVG 方法:在 Inskcape 中创建一个新的模板文件,然后定位 您喜欢的 5 个文本块。最终结果将包含 XML 块中的文本,如下所示:

<text
   xml:space="preserve"
   style="font-size:40px;...font-family:Sans"
   x="140"
   y="123.79075"
   id="text2999"
   sodipodi:linespacing="125%"><tspan
     sodipodi:role="line"
     id="tspan3001"
     x="140"
     y="123.79075">MyText here</tspan></text>

用 {} 等标记替换实际文本 (My text here),然后您可以使用 python oneliner 创建 svg 文件,例如:

python -c "import sys; open(sys.argv[2], 'wt').write(open(sys.argv[1]).read().format(*sys.argv[3:])  )" template.svg drawing.svg My other text file shines

这种方法的优点是您实际上可以非常详细地设置模板的样式和格式。 (嗯..四处浏览,看起来 photoshop 不能简单地打开 SVG 文件......总之太糟糕了 - 也许你可以将你需要的工作流程从它切换开?)

您可以使用 Applescript 或 Extendscript 编写 Photoshop 本身的脚本 - 有可用的指南 here

您可以使用 Applescript 版本执行类似的操作:

tell application "Finder" to set thePath to (home as string) & "TestText.tif"
set thePosix to quoted form of POSIX path of thePath
display dialog thePosix
do shell script "touch " & thePosix

tell application "Adobe Photoshop CC"
    activate
    make new document with properties {name:"Testtextlayers"}
    make new art layer at current document with properties {kind:text layer}
    make new art layer at current document with properties {kind:text layer}
    tell text object of art layer 1 of current document
        set {contents, size, stroke color} to {"Hello", 30.0, {class:RGB hex color, hex value:"913b8e"}}
    end tell
    tell text object of art layer 2 of current document
        set {contents, size, stroke color, position} to {"World", 48.0, {class:RGB hex color, hex value:"339966"}, {3, 4}}
    end tell
    set myOptions to {class:TIFF save options, image compression:none, byte order:Mac OS, save alpha channels:true, save spot colors:true, embed color profile:true}
    save current document in file thePath as TIFF with options myOptions appending no extension without copying

end tell

Extendscript 版本在 Linux 和 Windows 之间可能更便携。