使用 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 应用程序通常不包含 cutpaste 命令,通常是因为它们已经提供了更好的获取和设置内容的方法。但是,Photoshop 可以。因此,如果您还没有尝试过,请尝试在“告诉 Photoshop”块的末尾插入一个 paste 命令,然后注释掉“告诉系统事件”块,看看它是否适合您。如果是这样,您可以完全摆脱那个系统事件块!

p.p.p.s。还值得进一步研究 PS 的字典,看看它是否可以打开并直接放置您的“bg_file”。如果是这样,您也可以消除“告诉预览”和系统事件的其余部分!!