[FIXED] Erstellen Sie eine neue PSD -Datei und kopieren Sie eine neue Ebene mit AppleScript

Ausgabe

Ich versuche, eine Code-Assembly zu erstellen, um mein eigenes Applescript zu erstellen, um ein Bild in Photoshop zu erstellen, aber leider habe ich einen Fehler und kann nicht finden, woher er kommt.

Der erste Teil des Skripts funktioniert, das zufällige Bild wird gut in die Zwischenablage kopiert, aber der Rest ist problematisch.

-- 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

Lösung

Ok, ein Kompilierungsfehler; Ich hab es jetzt. Versuche dies:

-- 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

Denken Sie daran, dass Sie einen tell application "NAME" … end tellBlock verwenden, um 1. AppleScript mitzuteilen, an welche App Befehle gesendet werden sollen, und 2. die App, von der die benutzerdefinierte Terminologie (Schlüsselwörter) für Befehle und Objekte abgerufen werden sollen.

Daher tell application "System Events"…end tellverwendet Ihr Block SE-Terminologie und -Befehle. Der tell process "Photoshop"…end telldarin enthaltene Block ist immer noch an Systemereignisse adressiert. processist ein SE-definiertes Schlüsselwort für ein SE-spezifisches Objekt. Ebenso keystrokeist ein SE-spezifischer Befehl.

Für makeein neues art layerin Photoshop müssen Sie diesen Befehl in einen eigenen tell applicationBlock einfügen, der auf PS abzielt.

Ja, AppleScript ist oft verwirrend. Und Systemereignisse sind 10-mal verwirrender als das, da nicht offensichtlich ist, was GUI-Skripting ist und was nicht. Viel Glück.

ps Ich habe das Gefühl, dass der tell processBlock völlig überflüssig ist und nur erforderlich ist, wenn GUI-Skripte verwendet werden, um die Fenster einer App zu manipulieren. IIRC Der keystrokeBefehl weiß nicht oder kümmert sich nicht darum, welche App diese Tasten erhält. In diesem Fall ist es wichtig, dass Sie Photoshop aktivieren, bevor Sie mit dem „Drücken“ der Tasten beginnen. Ich überlasse es Ihnen zu entscheiden, ob Sie die tell process.

pps AppleScriptfähige Apps enthalten normalerweise keine cutund paste-Befehle, normalerweise, weil sie bereits weitaus bessere Möglichkeiten zum Abrufen und Einstellen von Inhalten bieten. Photoshop hingegen schon. Wenn Sie es also noch nicht ausprobiert haben, versuchen Sie, einen pasteBefehl am Ende Ihres „Tell Photoshop“-Blocks einzufügen, kommentieren Sie dann den „Tell System Events“-Block aus und sehen Sie, ob das für Sie funktioniert. Wenn ja, können Sie diesen Systemereignisblock vollständig entfernen!

ppps Es lohnt sich auch, das Wörterbuch von PS weiter zu untersuchen, um zu sehen, ob es Ihre „bg_file“ direkt öffnen und platzieren kann. Wenn dies der Fall ist, können Sie die „Tell-Vorschau“ und den Rest dieser Schrecklichkeit von Systemereignissen ebenfalls eliminieren !!


Beantwortet von –
foo


Antwort geprüft von –
Gilberto Lyons (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like