PDA

Vollständige Version anzeigen : Photoshop Scpripting - app.documents.layers.add() funktioniert nicht


stefu
28.07.14, 14:25
Hallo zusammen!

Ich bin gerade dabei anhand der Scripting Einfühung (http://www.arnokok.nl/pdf/581-Adobe%20Intro%20to%20Scripting.pdf) von Adobe das Scripten zu erlernen.

Nun scheitert es schon am Anfang:
Ich kann den Befehl „app.documents.layers.add()“ einfach nicht ausführen.

app.documents.add() funktioniert wunderbar.
Gebe ich dann app.documents.layers.add() ein, wird mit einem Fehler unterbrochen.

Ich nutze das ExtendedScript Toolkit in der aktuellsten Version.
Zielprogramm Photoshop CC 2014.

Wieso funktioniert das nicht, was mache ich falsch?
Es funktioniert mit und ohne Semikolonseparation nicht.

heikehk
28.07.14, 14:34
Hast du denn ein Dokument offen?

stefu
28.07.14, 14:35
Jepp.
Erstellt mit app.documents.add()

heikehk
28.07.14, 14:43
Gefunden:

es heißt nicht app.documents.layers.add();

sondern: app.documents.artLayers.add();

Du kannst hier im Datenbrowser ein wenig spicken. Wenns runtergebrochen kein add() gibt, dann geht das auch nicht.

Gruß
Heike

stefu
28.07.14, 14:45
Nein, der Fehler bleibt bestehen, auch wenn ich dem docuents ein "m" spendiere. :(

Ergänzung:

Laut Einführung soll es z. B. so funktionieren:

var myDoc = app.documents.add()
myDoc.layers.add()

Doch es bleibt bei der zweiten Zeile mit einem Fehler stehen. :(

heikehk
28.07.14, 14:50
also bei mir klappt das mit diesen drei Zeilen:

#target photoshop
app.bringToFront();

doc = app.documents.add();
doc.artLayers.add();

Wobei zumindest inDesign 2014 mit dem target nicht mehr klar kommt und meint es müsste CS6 sein.
Kann sein, dass es daran liegt, dass photoshop nicht weiß welches Dokument und mit meiner Variablen das Ganze klarer ist.

heikehk
28.07.14, 14:51
welche Einführung hast Du denn offen?

stefu
28.07.14, 14:52
Das klappt jetzt auch.
Dann kann ich die Einführung von Adobe (!!!) ja in die Tonne werfen.

Prima. :notok:

Die oben Verlinkte ist offen.
Und auch die englische, welche sich im Toolkit über Hilfe aufrufen lässt, zeigt diese Zeilen so an.


DANKE Dir, werde es nun so machen.
Weiß nur nicht, warum es vorher so nicht gingt mit artLayers — doch sch... drauf.

DANKE

heikehk
28.07.14, 14:55
Da steht unter anderem vor dem Abschnitt:

Im folgenden Abschnitt wird beschrieben, wie Sie mit dem DOM-Prinzip eine Ebene zu einem Dokument
hinzufügen. (Beachten Sie, wenn Sie dieses Skript für Photoshop verwenden, dass eine Ebene in AS art
layer genannt wird. Ebenen werden in JS artLayers bzw. in VBS ArtLayers genannt).

heikehk
28.07.14, 14:56
Das ist eine allgemeine Anleitung und da es in allen Applikationen Layers gibt, und in manchen diese noch genau spezifiziert werden müssen, muss man da leider immer im Objektmodell suchen, was genau geht. Das macht das Scripting ja so aufwändig.

stefu
28.07.14, 14:58
Weißt Du zufällig, wie ich das aktuelle Dokument anspreche?
Wenn ich es rein so aufrufe, gibt es wieder einen Fehler.

Menno, ich fühle mich wie in der ersten Klasse.
Wieso sind alle Programmiersprachen, die ich beherrschte den Bach runter gegangen?!

stefu
28.07.14, 14:59
Ach so...
Ich dachte ich könnte mit den Zeilen üben und auf meinem Wissen aufbauen.
Nun muss ich tatsächlich alles lesen… Juhu. *Ironie!

heikehk
28.07.14, 15:28
jupp alles lesen schadet nicht.

Du kannst das aktive Dokument ansprechen:

app.activeDocument

oder Dir das Objekt merken und dann dorthin wechseln:
doc = app.documents.add();
bla bla bla mit wechsel und dann
app.activeDocument = doc;

stefu
28.07.14, 15:30
OK - dann werde ich dich jetzt in Ruhe lassen können und hier herumexperimentieren.

1000 Dank.
Du bist ein Schatz.

heikehk
28.07.14, 18:36
Hab grad einen ersten Schritt zum "erfassen von Dateien" für das andere script gefunden :)

NotHelpless
29.07.14, 13:37
ääähm. Mal angenommen ich würde das was Stefu da geschrieben hat, abtippen.
richtig natürlich
:guw:
was würde dann passieren, was würde mir das bringen...wofür ist das?
oder ist das so speziell, das es in dem Fall nur für das gerade verwendete Projekt von stefu ist?
gruß Moni

heikehk
29.07.14, 14:14
Schau mal in den Startrail Thread moni :)

stefu
29.07.14, 15:56
So, nur für alle, die so verzweifeln wie ich.

Ich nutze zum Scripting JavaScript, weil ich es ziemlich einfach und logisch finde.
Fast so, als würde man die Anweisungen sprechen.

Dieses ganze Scripting-Zeugs ist also nichts anderes wie JavaScript (macht auch Sinn, weil es dann plattformübergreifend funktioniert) mit den von Adobe bereitgestellten Funktionen und Methoden.

Im Prinzip sehr simpel.
Allerdings ist es nervig, dass ich nirgendwo eine gute Referenz gefunden habe zu Adobe Scripting.

Hier das Material von Adobe: http://www.adobe.com/devnet/photoshop/scripting.html

Und die ExtendedScripting Toolbox ist auch mehr schlecht als recht, finde ich.
Sie macht rudimentär ihre Aufgabe, kommt jedoch an die ganzen VisualBasic, VisualC#, VisualSonstwas nicht mal annährend heran.
Und der Sinn des Dateibrowsers erschließt sich mir auch kaum.
Unter Windows listet der nur auf mit einem Stichwort und das war es — keine Parameter, keine Erklärungen. Schrecklich.

Scripting macht Spaß.
Scripting für Photoshop könnte Spaß machen, wenn es sehr gutes Referenzmaterial gäbe. Ich finde den Kram von Adobe nur rudimentär...

heikehk
29.07.14, 16:09
Kleiner Kommentar zu Deinen Script.
Schön gemacht aber zwei Dinge:
Der Filter klappt beim Mac leider nicht (ich kann alles auswählen)
Dadurch bricht die Verarbeitung dann bei falschen Dateien ab.
Ich sehe den Fortschrittsbalken nicht :(

Aber sieht gut aus ansonsten, soweit ich das mit meinen rudimentären Kenntnissen Beurteilen kann :)

stefu
29.07.14, 16:18
Grummel.
Leider weiß ich nicht, wie ich den Filter für den Mac machen müsste.

Wahrscheinlich bräuchte man sowieso eine Abfrage des Betriebsystemtyps, um es für alle Eventualitäten zu bauen.

Also bleibt zu hoffen, dass die Intelligenz ausreicht, nur TIF, JPG, PSD und sonstwas zu wählen.

Der Fortschrittsbalken wird als Fenster angezeigt.
Siehst Du das erste Fenster beim Start, wo man den Balken auswählen kann?

Vielleicht wird beim Mac das Window-System anders angesteuert?!
Ich weiß es nicht. :(

Zum Glück hat derjenige, der es braucht Windows — sonst würde ich jetzt haareraufend ausflippen...

heikehk
29.07.14, 16:20
Ach nicht haare raufen :)
Das mit dem Filter gehlt beim Mac nicht, dafür hatte ich beim PDF Script eine extra Abfrage gemacht, um zu klären, ob die Datei passt. Das mit dem ersten Fenster klappt noch aber ich denke auch, dass das schlichtweg nciht im Vordergrund bleibt. Is ja nciht schlimm, aber irgendwie schade :)

stefu
29.07.14, 16:27
probiere mal
win.focus()

Eventuell reicht es direkt hinter win.show().
Ansonsten vielleicht in die Schleife einbauen hinter WaitForRedraw().