使用命令行创建 "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 之间可能更便携。
我正在尝试使用命令行 (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 之间可能更便携。