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
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.jsx
wie 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 .jpg
eine Aufforderung zu vermeiden.
Meine Verwendung der t
Variablen ist ziemlich verwirrend, ich hatte angenommen, dass die 0. Schicht die Basisschicht wäre, aber es ist tatsächlich die oberste Schicht und t
gleicht 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:
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:
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.
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:
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.
Rüsiel
OGHaza
Benutzer3323371
OGHaza
OGHaza
Benutzer3323371
OGHaza
var a = 0; var p = 8;
(0 Hintergrundebenen, 8 Permutationsebenen) ändern.Benutzer3323371
OGHaza
Benutzer3323371
OGHaza
n
die 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 DateipngSaveOptions.quality = 70;
(oder 80, 90, 100 für beste Qualität usw.)Benutzer3323371
OGHaza