Kombinationen und Permutationen von Photoshop-Ebenen?

Dieser ist ein großer

Ich habe ein Photoshop-Dokument mit 8 Ebenen. Ich muss einen Weg finden, diese 8 Ebenen zu verwenden und bestimmte Kombinationen zu erstellen, abhängig von den folgenden Regeln ...

Beispiel:

{1,2,3} {1,2,4} {1,2,5} {1,2,6} {1,2,7} {1,2,8} {1,3,4} { 1,3,5} {1,3,6} {1,3,7} {1,3,8} {1,4,5} {1,4,6} {1,4,7} {1 ,4,8} {1,5,6} {1,5,7} {1,5,8} {1,6,7} {1,6,8} {1,7,8} {2, 3,4} {2,3,5} {2,3,6} {2,3,7} {2,3,8} {2,4,5} {2,4,6} {2,4 ,7} {2,4,8} {2,5,6} {2,5,7} {2,5,8} {2,6,7} {2,6,8} {2,7, 8} {3,4,5} {3,4,6} {3,4,7} {3,4,8} {3,5,6} {3,5,7} {3,5,8 } {3,6,7} {3,6,8} {3,7,8} {4,5,6} {4,5,7} {4,5,8} {4,6,7} {4,6,8} {4,7,8} {5,6,7} {5,6,8} {5,7,8} {6,7,8}

Bei Verwendung der obigen Kombination muss jede Kombination als Bild gespeichert werden. Also, wenn Sie zum Beispiel eine der obigen Kombinationen nehmen, {3,6,8}. Photoshop sollte die Ebenen 3,6,8 verwenden, um ein neues Bild oder eine neue Ebene zu erstellen, die aus diesen drei Segmenten besteht.

Ich bin mir nicht sicher, wie ich das anfangen soll. Bisher habe ich alle möglichen Kombinationen mit dieser großartigen Seite ausgearbeitet:

http://www.mathsisfun.com/combinatorics/combinations-permutations-calculator.html

Antworten (4)

Ich hatte keine Ahnung, dass Sie mit JavaScript in Photoshop skripten können, bevor Sie die Antwort von @horatio gelesen haben, also habe ich es versucht.

Wenn Sie neu in der Skripterstellung sind (machen Sie dann zuerst einige Tutorials), empfehle ich, so viel wie möglich aus einem der Skripte zu stehlen, die mit Photoshop geliefert werden. Ich habe (CS6) verwendet, damit ich nicht nachschlagen musste, Layer Comps To Files.jsxwie selbst Dateien speichern.

var a = 1; // number base layers
var p = 8; // number of layers used for permutations

var t = app.activeDocument.artLayers.length - 1; 

function hideAll() {
    for (var i = a; i < a+p; i++) {
        app.activeDocument.artLayers[t-i].visible = false;
    }
} 

for (var x = a; x < a+p; x++) {
    for (var y = x+1; y < a+p; y++) {
        for (var z = y+1; z < a+p; z++) {
            hideAll();
            app.activeDocument.artLayers[t-x].visible = true;
            app.activeDocument.artLayers[t-y].visible = true;
            app.activeDocument.artLayers[t-z].visible = true;
            saveFile( app.activeDocument, x+'-'+y+'-'+z, exportInfo);
        }
    }  
}

saveFile(...)Ich habe das ursprüngliche Skript gestohlen, obwohl ich es so geändert habe, dass es sofort gespeichert wird, um .jpgeine Aufforderung zu vermeiden.
Meine Verwendung der tVariablen ist ziemlich verwirrend, ich hatte angenommen, dass die 0. Schicht die Basisschicht wäre, aber es ist tatsächlich die oberste Schicht und tgleicht dies aus.

Ich habe es mit einem 9-Ebenen-Bild, 1 Basisebene und dann 8 Smileys ausprobiert. Das Ergebnis sind 56 Permutationen in ungefähr 10 Sekunden:

Ergebnis


Ich habe versucht, einen Weg zu finden, dies iterativ mit Aktionen zu tun, aber mit 8 Ebenen muss man die manuelle Erstellung von fast der Hälfte der Permutationen (21 von insgesamt 56) aufzeichnen, und es beinhaltet das Löschen von Duplikaten am Ende, aus diesem Grund I glaube nicht, dass es eine besonders praktikable Option ist.

Wenn die Reihenfolge der Ebenen wichtig wäre, würde dies ziemlich gut funktionieren, Sie würden 1/8 der Arbeit aufnehmen und es würden keine Duplikate erzeugt.

Sie würden sich selbst aufzeichnen, indem Sie die ersten 21 Permutationen erstellen, wie unten gezeigt, in jeder Phase eine Kopie speichern und dann im letzten Schritt die letzte Ebene an die erste Position verschieben (dh Ebene 8 wird Ebene 1). Speichern Sie die Aktion, führen Sie sie dann mehrmals aus und alle Permutationen werden gespeichert.

Für 8 Schichten sind hier die erzeugten Permutationen:

Permutationen

In der letzten Reihe #zeigen die s neue Permutationen an, alles andere ist ein Duplikat. So können Sie sehen, dass jeder Lauf der Aktion abnehmende Renditen hat und nach 5 Aktionen haben Sie alle möglichen Permutationen.

Wenn Sie es also fünfmal ausführen, erhalten Sie 126 Ergebnisse (von denen 56 nützlich sind).

Es wäre eine bessere Idee, die Aktion dreimal zu wiederholen, die letzten 9 erzeugten Bilder zu löschen, die Duplikate auf 17 zu reduzieren und dann die verbleibenden 4 Permutationen manuell zu erstellen.

– Liebe die Gesichter ;)
@Rsiel danke ;)
Wow :o Ich bin nicht so versiert mit der Verwendung von Photoshop-Skripten, also verwende ich die jdigioia-Methode unten, indem ich eine Aktion für jede Kombination erstelle, da ich unter Zeitdruck stehe. Wenn Sie Lust haben, das obige Skript zu teilen, wird es von Vorteil sein. Aber danke für die Antwort. Liebe die Gesichter auch.
@ user3323371 Keine Probleme, ich bin mit dem zweiten Teil nur so tief in die Tiefe gegangen, weil ich gehofft hatte, einen Heureka-Moment zu haben, in dem ich eine superschnelle und einfache Methode entdeckt habe. Leider bin ich am Ende angelangt und hatte ein kompliziertes Durcheinander ;) Skript ist gerade zu Hause, werde es später in einem Kommentar verlinken.
@ user3323371, kann eine vollständige Kopie des Skripts auf pastebin finden , Sie müssen oben 3 Variablen festlegen.
Danke. Ich versuche, das Skript in CS6 zu verwenden, und ich erhalte einen Fehler 1302: No Such Element Line: 22 -> app.activeDocument.artLayers[ti].visible = false;. Wie hast du die PSD eingerichtet? Waren es RGB oder CMYK usw. Ebenennamen?
@user, hier ist meine Ebenenpalette , Ebenennamen spielen jedoch keine Rolle! Es ist RBG, sollte aber keine Rolle spielen. Ha, ich habe gerade den Fehler gegoogelt und Ihre SO-Frage ist der Top-Hit;) Ich sehe, Sie haben 8 Ebenen. Wenn keine davon Hintergrundebenen sind, müssen Sie die Werte oben im Skript auf var a = 0; var p = 8;(0 Hintergrundebenen, 8 Permutationsebenen) ändern.
Danke sehr geschätzt. und da es der Top-Hit ist, findet das hoffentlich jemand anderes nützlich. Noch eine Frage. Dies funktioniert, indem die Permutationen von 3 Schichten 56 Permutationen erstellt werden. Wie ändere ich den Wert 3 alle anderen Variationen bis zur Verwendung von 8 Ebenen. pastebin.com/raw.php?i=HjxK3j68
Hehe, dachte, Sie könnten das fragen, hier ist eine Version , die fest codiert ist, um die Permutationen von 4 zu machen. Ich werde in den nächsten Stunden etwas zusammenstellen, das Permutationen für jede Zahl machen kann.
Vielen Dank für alle, die in PNG anstelle von JPEG speichern möchten. Sie können die letzten 9 Codezeilen wie folgt ändern: function saveFile( docRef, fileNameBody, exportInfo) { docRef.bitsPerChannel = BitsPerChannelType.EIGHT; var saveFile = new File(pathToSave + fileNameBody + ".png"); pngSaveOptions = neue PNGSaveOptions(); PNGSaveOptions.embedColorProfile = exportInfo.icc; pngSaveOptions.quality = exportInfo.pngQuality; docRef.saveAs(saveFile, pngSaveOptions, true, Extension.LOWERCASE); }
@user, pastebin.com/u0BSBNTv - Stellen Sie ndie Anzahl der sichtbaren Ebenen ein. Ich habe Ihren PNG-Speichercode ausgetauscht (und den Code etwas vereinfacht - aber er funktioniert identisch). Beachten Sie, dass Sie die PNG-Qualität vorher nicht wirklich eingestellt haben (Sie haben einen Wert eingestellt, der nicht erstellt wurde), also wäre es nur der Standardwert gewesen - wenn Sie es explizit einstellen möchten, können Sie das 2. Letzte auskommentieren Zeile in der Datei pngSaveOptions.quality = 70;(oder 80, 90, 100 für beste Qualität usw.)
Fantastisch :D Du verstehst nicht, wie dankbar ich bin. Aufrichtig. Danke schön.
@user, kein Problem, froh, dass es geholfen hat

Der Javascript-Befehl zum Ausblenden/Anzeigen einer Ebene lautet:

activeDocument.artLayers[i].visible = true;

Der Rest ist akademisch: Richten Sie ein Array ein (oder verwenden Sie einfach Ihren kombinatorischen Algorithmus), iterieren Sie, schalten Sie die Sichtbarkeit um, "als Kopie speichern".

Mein erster Gedanke ist also, die über 50 Kombinationen zu speichern, indem Sie alle anderen Ebenen mit Ausnahme der Ebenen in der aktuellen 3-Zahlen-Kombination ausblenden und einfach für Web und Geräte als Bild speichern, aber ich denke, Sie möchten dies tun wiederholbar.

Wenn Sie dies in Zukunft mit verschiedenen Fotos tun möchten, können Sie für jede Kombination eine benutzerdefinierte Photoshop-Aktion erstellen, wenn dies Ihr Endziel ist, um dies immer wieder mit verschiedenen Fotos in denselben 8 Ebenen tun zu können. Der Link unten führt Sie durch das Erstellen und Speichern einer Aktion und unten ist mein Gedanke, wie Sie jede Kombination von 3 als benutzerdefinierte Aktion speichern können, damit Sie die 8 Fotos nach Belieben ersetzen und alle Kombinationen in verwenden können Zukunft.

http://www.hongkiat.com/blog/photoshop-tutorial-1-click-photo-editing-with-action/

Siehe Link zur Einrichtung, aber sobald Sie bereit sind, können Sie:

  • Alle Ebenen 'ausblenden'
  • Drücken Sie bei Ihrer Aktion auf Aufnahme
  • „Zeigen“ Sie 3 ausgewählte Bilder der über 50 Kombinationen
  • Für Web und Geräte speichern - Tun Sie dies für jede Kombination oder alle in derselben Aktion, wenn Sie möchten (!)
  • Aufnahme beenden

In jedem Fall müssen Sie es entweder manuell einrichten und die Fotos speichern, indem Sie sie jeweils als Aktion speichern, ODER Sie tun dies einfach einmal und erhalten Ihre Bildsätze aus denselben 8 Fotos.

Hoffe das ist wenigstens ein Anfang! Klingt auf jeden Fall nach einer coolen Idee.

Jo

Erstellen Sie gemäß der Antwort von jdigioia Ihre Aktion, die die Ebenen ein- und ausblendet, aber nach jeder Instanz Create a Layer Comp .

Wenn Sie die Aktion ausführen, sollten Sie für jede Instanz eine Ebenenkomposition haben .

Verwenden Sie schließlich File / Scripts / Layer Comps to Files, um Ihre Bilder zu exportieren.

Es wäre wahrscheinlich am besten, sie in getrennten Aktionen durchzuführen . dh. eine Aktion für alle Möglichkeiten mit Ebene 1,
dann dupliziere diese Aktion und füge Schritte hinzu/verschiebe/dupliziere oder lösche Schritte, um alle Möglichkeiten mit Ebene 2 zu nutzen usw.