使用 AppleScript 创建一个新的 PSD 文件和 copy/paste 个新图层
Create a new PSD file and copy/paste new layer with AppleScript
我尝试制作一个代码程序集来创建我自己的 applescript 以在 Photoshop 中创建图像,但不幸的是我有一个错误,我找不到它的来源。
脚本的第一部分有效,随机图像很好地复制到剪贴板,但其余部分有问题。
-- Select random image
tell application "Finder"
set bg_img to file (random number from 1 to (count files of folder "HD:Works:Club:LAYERS:0-BG")) of folder "HD:Works:Club:LAYERS:0-BG"
end tell
tell application "Preview"
activate
open bg_img
end tell
-- Select and copy image to clipboard
tell application "System Events"
tell process "Preview"
keystroke "a" using command down
keystroke "c" using command down
end tell
end tell
-- Quit Preview Application
tell application "Preview" to quit
tell application "Adobe Photoshop 2022"
-- Create a new document
set docRef to make new document with properties {width:1200, height:1200, resolution:72}
tell docRef
-- Unlock the background layer and fill it with gray color
set background layer of layer 1 of docRef to false
fill selection with contents {class:RGB color, red:200, green:200, blue:200}
end tell
end tell
-- Paste image to new layer
tell application "System Events"
tell process "Adobe Photoshop 2022"
set newLayer to make art layer with properties {name:"LayerA"}
keystroke "v" using command down
end tell
end tell
好的,编译错误;我现在明白了。试试这个:
-- Paste image to new layer
tell application "Adobe Photoshop 2022"
activate
set newLayer to make art layer with properties {name:"LayerA"}
end tell
tell application "System Events"
tell process "Adobe Photoshop 2022"
keystroke "v" using command down
end tell
end tell
请记住,您使用 tell application "NAME" … end tell
块来 1. 告诉 AppleScript 向哪个应用程序发送命令,以及 2. 从中获取命令和对象的自定义术语(关键字)的应用程序。
因此您的 tell application "System Events"…end tell
块使用 SE 术语和命令。其中的 tell process "Photoshop"…end tell
块仍然针对系统事件。 process
是 SE-specific 对象的 SE-defined 关键字。同样 keystroke
是一个 SE-specific 命令。
要在 Photoshop 中 make
一个新的 art layer
,您必须将 that 命令放在它自己的 tell application
块中,该块针对PS.
是的,AppleScript 经常令人困惑。系统事件比这更令人困惑 10 倍,这要归功于它 not-obvious 什么是 GUI 脚本,什么不是。祝你好运。
--
p.s。我感觉 tell process
块是完全多余的,只有在使用 GUI 脚本来操作应用程序的 windows 时才需要。 IIRC keystroke
命令不知道或不关心哪个应用程序收到这些键,在这种情况下,重要的是在开始“按下”键之前激活 Photoshop。我会留给你来决定你是否可以丢弃 tell process
.
p.p.s。 AppleScriptable 应用程序通常不包含 cut
和 paste
命令,通常是因为它们已经提供了更好的获取和设置内容的方法。但是,Photoshop 可以。因此,如果您还没有尝试过,请尝试在“告诉 Photoshop”块的末尾插入一个 paste
命令,然后注释掉“告诉系统事件”块,看看它是否适合您。如果是这样,您可以完全摆脱那个系统事件块!
p.p.p.s。还值得进一步研究 PS 的字典,看看它是否可以打开并直接放置您的“bg_file”。如果是这样,您也可以消除“告诉预览”和系统事件的其余部分!!
我尝试制作一个代码程序集来创建我自己的 applescript 以在 Photoshop 中创建图像,但不幸的是我有一个错误,我找不到它的来源。
脚本的第一部分有效,随机图像很好地复制到剪贴板,但其余部分有问题。
-- Select random image
tell application "Finder"
set bg_img to file (random number from 1 to (count files of folder "HD:Works:Club:LAYERS:0-BG")) of folder "HD:Works:Club:LAYERS:0-BG"
end tell
tell application "Preview"
activate
open bg_img
end tell
-- Select and copy image to clipboard
tell application "System Events"
tell process "Preview"
keystroke "a" using command down
keystroke "c" using command down
end tell
end tell
-- Quit Preview Application
tell application "Preview" to quit
tell application "Adobe Photoshop 2022"
-- Create a new document
set docRef to make new document with properties {width:1200, height:1200, resolution:72}
tell docRef
-- Unlock the background layer and fill it with gray color
set background layer of layer 1 of docRef to false
fill selection with contents {class:RGB color, red:200, green:200, blue:200}
end tell
end tell
-- Paste image to new layer
tell application "System Events"
tell process "Adobe Photoshop 2022"
set newLayer to make art layer with properties {name:"LayerA"}
keystroke "v" using command down
end tell
end tell
好的,编译错误;我现在明白了。试试这个:
-- Paste image to new layer
tell application "Adobe Photoshop 2022"
activate
set newLayer to make art layer with properties {name:"LayerA"}
end tell
tell application "System Events"
tell process "Adobe Photoshop 2022"
keystroke "v" using command down
end tell
end tell
请记住,您使用 tell application "NAME" … end tell
块来 1. 告诉 AppleScript 向哪个应用程序发送命令,以及 2. 从中获取命令和对象的自定义术语(关键字)的应用程序。
因此您的 tell application "System Events"…end tell
块使用 SE 术语和命令。其中的 tell process "Photoshop"…end tell
块仍然针对系统事件。 process
是 SE-specific 对象的 SE-defined 关键字。同样 keystroke
是一个 SE-specific 命令。
要在 Photoshop 中 make
一个新的 art layer
,您必须将 that 命令放在它自己的 tell application
块中,该块针对PS.
是的,AppleScript 经常令人困惑。系统事件比这更令人困惑 10 倍,这要归功于它 not-obvious 什么是 GUI 脚本,什么不是。祝你好运。
--
p.s。我感觉 tell process
块是完全多余的,只有在使用 GUI 脚本来操作应用程序的 windows 时才需要。 IIRC keystroke
命令不知道或不关心哪个应用程序收到这些键,在这种情况下,重要的是在开始“按下”键之前激活 Photoshop。我会留给你来决定你是否可以丢弃 tell process
.
p.p.s。 AppleScriptable 应用程序通常不包含 cut
和 paste
命令,通常是因为它们已经提供了更好的获取和设置内容的方法。但是,Photoshop 可以。因此,如果您还没有尝试过,请尝试在“告诉 Photoshop”块的末尾插入一个 paste
命令,然后注释掉“告诉系统事件”块,看看它是否适合您。如果是这样,您可以完全摆脱那个系统事件块!
p.p.p.s。还值得进一步研究 PS 的字典,看看它是否可以打开并直接放置您的“bg_file”。如果是这样,您也可以消除“告诉预览”和系统事件的其余部分!!