Anmelden

Vollständige Version anzeigen : Photoshop Ebenenstapel per Aktion oder Skript sortieren


FragenÜberFragen
08.01.23, 09:34
Liebe Photoshop-Experten,

ich habe eine Frage - vorab: es geht um mehrere 10000 Bilder, deshalb wäre mir eine Automatisierung per Aktion oder Skript sehr gelegen. :bleh:

Meine Bilder haben drei Ebenen: Hintergrund, Einstellungsebene 1 (Tonwert), Einstellungsebene 2 (Farbton/Sättigung). Ich möchte, dass bei allen diesen Bildern die Einstellungsebene 2 ganz oben liegt, was derzeit zwar bei den allermeisten Bildern der Fall ist, aber nicht bei allen.

Ich möchte das vor allem deshalb, damit ich diese Ebene ggf. später einmal löschen kann per Aktion (Löschen der obersten Ebene im Stapel).

Oder gibt es die Möglichkeit, im Ebenenstapel gezielt die Einstellungsebene "Farbton/Sätttigung" zu finden und auszublenden und das bitte automatisiert?

Ich hoffe, ich konnte verständlich machen, was das Problem ist bzw. was mir vorschwebt. :nixweiss:

Vielen Dank schon mal und beste Grüße
Dirk

heikehk
08.01.23, 12:15
Die einzige Idee, die ich dazu habe wäre, wenn die Einstellungsebene in den Bildern immer gleich heißt, dann müsse man die per Skript immer finden können, wo sie sich auch befindet und müsste sie dann nach oben verschieben können.

Ich skripte allerdings fast nie in Photoshop, weswegen ich das nicht umsetzen kann.

Heißt sie denn immer gleich?

LG
und willkommen im PSC
Heike

FragenÜberFragen
08.01.23, 12:30
Heißt sie denn immer gleich?


Ja, immer gleich.

Das dachte ich mir nämlich auch, dass das dann gescriptet werden könnte. Allerdings weiß ich dann auch nicht, wie konkret die Syntax ist, um den Ebenenstapel so zu sortieren, dass besagte Ebene immer oben liegt.

Alternativ wäre es auch eine Option, die immer gleich heißende Ebene über ein Skript aufzufinden und auszublenden. Eigentlich noch eleganter.

heikehk
09.01.23, 16:17
da hast Du recht :)
Das könnte gegebenenfalls auch eine Aktion erledigen...

outrage
20.01.23, 14:12
Dieses skript sollte machen, was Du möchtest:

for (var i = activeDocument.artLayers.length-1; i>=0; i--) {
activeDocument.activeLayer = activeDocument.artLayers[i];
if (activeDocument.activeLayer.name == "Farbton/Sättigung 1") {
activeDocument.activeLayer.visible = false;
}
}

activeDocument.close(SaveOptions.SAVECHANGES);

FragenÜberFragen
21.01.23, 14:50
Dieses skript sollte machen, was Du möchtest:

for (var i = activeDocument.artLayers.length-1; i>=0; i--) {
activeDocument.activeLayer = activeDocument.artLayers[i];
if (activeDocument.activeLayer.name == "Farbton/Sättigung 1") {
activeDocument.activeLayer.visible = false;
}
}

activeDocument.close(SaveOptions.SAVECHANGES);

Vielen Dank!

Das probiere ich gerne aus.

heikehk
24.01.23, 23:26
Hi outrage,

kleine Frage, weil ich was lernen will.

Bedeutet die 1 in dieser Zeile, dass der ersten Farbton/Sättigung Layer, den das Skript findet ausgeblendet wird?

if (activeDocument.activeLayer.name == "Farbton/Sättigung 1")

LG
Heike

outrage
25.01.23, 09:49
Nein.
Das bedeutet, dass die Ebene, die exakt den Namen "Farbton/Sättigung 1" trägt, ausgeblendet wird.

Ich habe das skript noch mal umgeschrieben. Damit wird die Farbton/Sättigungsebene ausgeblendet, egal wie sie heisst. Sind mehrere vorhanden, werden alle ausgeblendet:


for (var i = activeDocument.artLayers.length-1; i>=0; i--) {
activeDocument.activeLayer = activeDocument.artLayers[i];
if (activeDocument.activeLayer.kind == LayerKind.HUESATURATION) {
activeDocument.activeLayer.visible = false;
}
}

activeDocument.close(SaveOptions.SAVECHANGES);

heikehk
25.01.23, 13:31
Hi outrage,

cool :)


var count = 0
for (var i = activeDocument.artLayers.length-1; i>=0; i--) {
activeDocument.activeLayer = activeDocument.artLayers[i];
if (activeDocument.activeLayer.kind == LayerKind.HUESATURATION) {
count = count + 1
if (count == 2) {
activeDocument.activeLayer.visible = false;
}

}
}

activeDocument.close(SaveOptions.SAVECHANGES);

Würde diese Anpassung dafür sorgen, dass ich z.b. nur den zweiten gefundenen Farbton/Sättigung Layer ausblenden würde?

Macht Spaß :)

outrage
26.01.23, 10:23
Ja, bei mir funktioniert es so - die zweite Farbton/Sättigung-Ebene von unten wird ausgeblendet. Ich habe die for-Schleife noch mal umgeschrieben, falls Du die zweite Farbton/Sättigung-Ebene von oben ausblenden willst (und statt count = count + 1 kannst Du auch count++ schreiben):

var count = 0
for (var i = 0; i < activeDocument.artLayers.length-1; i++) {
activeDocument.activeLayer = activeDocument.artLayers[i];
if (activeDocument.activeLayer.kind == LayerKind.HUESATURATION) {
count++
if (count == 2) {
activeDocument.activeLayer.visible = false;
}

}
}

activeDocument.close(SaveOptions.SAVECHANGES);

heikehk
26.01.23, 13:31
Supi. vielen Dank :)
freut mich sehr, dass Du hier bist und so fit im Skripten bist.

Die Skriptzeilen finde ich immer lesbarer, wenn man sie hier im Forum in den vbcode "code" packt. das sieht dann so aus:

Hier sind dann die Zeilen mir Code
können auch mehrere sein

und sieht so aus:
Hier sind dann die Zeilen mir Code
können auch mehrere sein

Liebe Grüße
Heike