Das Script soll dabei die richtige Aktion mittels des Dateinamen wählen (Ich hab dafür eine bestimmte Dateinamen-Präfix). Dann Soll die Datei mehrere male mit verschiedenen eingeblendeten Ebenen abgespeichert werden und dabei den Namen des Originalbildes + Einen neuen Präfix verwenden.
Challenge accepted! Hier das Skript...
Überall wo "INDIVIDUELL ANPASSEN" in den Kommentar-Überschriften zu lesen ist, musst du entsprechend tätig werden.
Code:
#target photoshop
/* ----- Basisangaben - INDIVIDUELL ANPASSEN ----- */
var mySplt = "_"; // Trenner (der Dateinamen und Prä- oder Suffix trennt) angeben (hier: _)
var myPrSf = "prefix"; // Angeben ob "prefix" oder "suffix" verwendet wird
var mySvLv = "level_1"; // level_0 bis level_3 - "level_0" = Speichern im aktuellen Ordner des einzufügenden Bildes, "level_1" = eine Ebene hoch, usw.
var mySvFr = "/Speicherordner"; // Ordnername in dem gespeichert werden soll mit vorangestelltem /
// leer lassen ("") wenn kein Ordner ausgewählt werden soll
// Der angegebene Ordner muss bereits existieren!
/* ----- Dateinamen verwurschteln ----- */
var docRef = app.activeDocument; // Dokumenteninfo
var docSpt = docRef.name.split(mySplt); // Dokumentenname bei Trenner (Zeile 6) zerlegen
var docCnt = docSpt.length -1; // Teile des zerlegten Namens zählen (-1 um nachfolgend bei 0 beginnen zu können)
var docPrx = docSpt[docCnt].split('.'); // Suffix bei Trenner: Punkt zerlegen
/* ----- Speicherort festlegen ----- */
if(mySvLv == "level_1") { // Level anhand der Basisangabe
var mySaveBase = new Folder(docRef.path.parent); // Ein Verzeichnis zurück gehen
} else if(mySvLv == "level_2") {
var mySaveBase = new Folder(docRef.path.parent.parent); // Zwei Verzeichnisse zurück gehen
} else if(mySvLv == "level_3") {
var mySaveBase = new Folder(docRef.path.parent.parent.parent); // Drei Verzeichnisse zurück gehen
} else {
var mySaveBase = new Folder(docRef.path); // Im Bilder-Verzeichnis bleiben (level_0)
}
/* ----- Prä-/Suffix und Dateinamen ohne Endung isolieren ----- */
if(myPrSf == "suffix") {
var chooseAction = docPrx[0];
var newDocName = docRef.name;
newDocName = newDocName.match(/(.*)(\.[^\.]+)/) ? newDocName = newDocName.match(/(.*)(\.[^\.]+)/):newDocName = [newDocName, newDocName];
var myBaseFilePt = newDocName[1].toString().replace(mySplt + chooseAction, '');
} else {
var chooseAction = docSpt[0];
var newDocName = docRef.name;
newDocName = newDocName.match(/(.*)(\.[^\.]+)/) ? newDocName = newDocName.match(/(.*)(\.[^\.]+)/):newDocName = [newDocName, newDocName];
var myBaseFilePt = newDocName[1].toString().replace(chooseAction + mySplt, '');
}
/* ----- Funktionen ----- */
function getIndex() { // Index aller geöffneter Dokumente erstellen
var refIndex = new ActionReference();
refIndex.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
return desc = executeActionGet(refIndex).getInteger(stringIDToTypeID('itemIndex')) -1;
}
var thisIndex = getIndex();
var myDocument = app.documents;
function SaveJPEG(saveFile, jpegQuality) { // JPEG Speicheroptionen
var jpgSaveOptions = new JPEGSaveOptions();
jpgSaveOptions.format = SaveDocumentType.JPEG;
jpgSaveOptions.embedColorProfile = true; // true, false
jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE; // STANDARDBASELINE, OPTIMIZEDBASELINE, PROGRESSIVE
jpgSaveOptions.matte = MatteType.NONE; // NONE, BACKGROUND, SEMIGREY, WHITE, etc.
jpgSaveOptions.quality = jpegQuality; // 0 bis 12 ist beim Speichern als JPG möglich
activeDocument.saveAs(saveFile, jpgSaveOptions, true);
}
function SavePNG(saveFile, pngQuality) { // PNG Speicheroptionen
var pngSaveOptions = new ExportOptionsSaveForWeb;
pngSaveOptions.format = SaveDocumentType.PNG
pngSaveOptions.PNG24 = true; // PNG8 ebenfalls möglich
pngSaveOptions.transparency = false; // true, false
pngSaveOptions.interlaced = false; // true, false
pngSaveOptions.quality = pngQuality; // 0 bis 100 ist beim Speichern als PNG möglich
activeDocument.exportDocument(saveFile, ExportType.SAVEFORWEB, pngSaveOptions);
}
var myNewFix, myExtension, myQuality; // Variablen vorbereiten
/* ----- Passende Aktion auswählen - INDIVIDUELL ANPASSEN----- */
if(chooseAction == "fix1") { // fix1 = Bezeichnung von Prä- oder Suffix 1 im Dateinamen
app.doAction("Aktion1", "AktionenSetName") // Aktionsname (hier: Aktion1) und Aktionenset mit .atn angeben
} else if(chooseAction == "fix2") { // fix2 = Bezeichnung von Prä- oder Suffix 2 im Dateinamen
app.doAction("Aktion2", "AktionenSetName"); // Aktionsname (hier: Aktion2) und Aktionenset mit .atn angeben
} else if(chooseAction == "fix3") { // fix3 = Bezeichnung von Prä- oder Suffix 3 im Dateinamen
app.doAction("Aktion3", "AktionenSetName"); // Aktionsname (hier: Aktion3) und Aktionenset mit .atn angeben
} else if(chooseAction == "fix4") { // fix4 = Bezeichnung von Prä- oder Suffix 4 im Dateinamen
app.doAction("Aktion4", "AktionenSetName"); // Aktionsname (hier: Aktion4) und Aktionenset mit .atn angeben
} else {
app.doAction("Aktion5", "AktionenSetName"); // Aktionsname (hier: Aktion5) und Aktionenset mit .atn angeben für Prä- oder Suffix 5
}
/* ----- Auf das MockUp-Dokument zum Speichern wechseln, wenn erforderlich ----- */
if(thisIndex != 0) {
var selectDoc = myDocument[thisIndex -1];
} else {
var selectDoc = myDocument[0];
}
app.activeDocument = selectDoc; // Auf das vorherige Dokument wechseln wenn nicht bereits durch Aktion geschehen
/* ----- Ebenen ein-/ausblenden und Datei speichern - INDIVIDUELL ANPASSEN UND ERWEITERN ----- */
/* SPEICHERVORGANG EINS */
myNewFix = "erstePräfix"; // Name der neuen Prä- oder Suffix
myExtension = "jpg"; // Speichern als "jpg" oder "png"
myQuality = 10; // 0-12 für jpg und 0-100 für png
activeDocument.layers["Die Ebene"].visible = !activeDocument.layers["Die Ebene"].visible; // Blendet Ebene mit Namen (hier "Die Ebene") aus; oder ein wenn bereits ausgeblendet
if(myPrSf == "suffix") {
var saveFile = File(mySaveBase + mySvFr + "/" + myBaseFilePt + mySpl + myNewFix + "." + myExtension);
} else {
var saveFile = File(mySaveBase + mySvFr + "/" + myNewFix + mySplt + myBaseFilePt + "." + myExtension);
}
if(myExtension == "png") { SavePNG(saveFile, myQuality); } else { SaveJPEG(saveFile, myQuality); }
/* SPEICHERVORGANG ZWEI */
myNewFix = "zweitePräfix"; // Name der neuen Prä- oder Suffix
// myExtension = "png"; // Wenn abweichend vom ersten Speichervorgang // am Anfang der Zeile entfernen und "jpg" oder "png" angeben
// myQuality = 100; // Wenn abweichend vom ersten Speichervorgang // am Anfang der Zeile entfernen und 0-12 für jpg oder 0-100 für png angeben
// mySvFr = "/Anderer Speicherordner"; // Wenn erforderlich // am Anfang der Zeile entfernen und neuen Ordner angeben mit führendem / (Schrägstrich) - Der Ordner muss bereits existieren!
activeDocument.layers["Die Ebene"].visible = !activeDocument.layers["Die Ebene"].visible; // Blendet Ebene mit Namen (hier "Die Ebene") ein; oder aus wenn bereits eingeblendet
if (myPrSf == "suffix") {
var saveFile = File(mySaveBase + mySvFr + "/" + myBaseFilePt + mySpl + myNewFix + "." + myExtension);
} else {
var saveFile = File(mySaveBase + mySvFr + "/" + myNewFix + mySplt + myBaseFilePt + "." + myExtension);
}
if(myExtension == "png") { SavePNG(saveFile, myQuality); } else { SaveJPEG(saveFile, myQuality); }
/* --- Weitere Speichervorgänge können eingefügt werden --- */
/* ----- Auf ins MockUp eingefügte Dokument wechseln und dieses schließen ----- */
selectDoc = myDocument[1]; // Zweites Dokument auswählen
app.activeDocument = selectDoc; // Zum zweiten Dokument wechseln
activeDocument.close(SaveOptions.DONOTSAVECHANGES); // Zweites Dokument Schließen ohne Speichern
Das Skript habe ich in diesem Beispiel als "DasMockupDing.jsx" im Photoshop Scripts-Ordner gespeichert.
Füge Deinem Aktionen-Set eine weitere Aktion hinzu. Hier ist sie START genannt.
Als Menübefehl wird das gespeicherte Skript ausgewählt.
Nun kannst du dein Mockup-Dokument öffnen und die Stapelverarbeitung starten.
Mit dem Skript kannst Du (Zeile 7) entweder einen Präfix oder Suffix in den Dateinamen verwenden.
Das Skript erwartet, dass beim Ausführen das Mockup-Dokument bereits geöffnet ist, ebenso, dass alle angegeben Speicherordner existieren. Diese würden sich zwar mit
create() erstellen lassen, doch davon rate ich bei einer Kombination aus Stapelverarbeitung, Skript und Aktionen ab. Das Skript speichert die Dateien als
*.jpg und/oder
*.png. Es ist irrelevant ob nach dem Ausführen deiner Aktionen das geöffnete Bild oder das Mockup-Dokument angewählt ist, nur das Smartobjekt im Mockup-Dokument muss geschlossen (und gespeichert) sein.
Zu Zeile 8 und 9:
Angenommen deine Bilder liegen in
\Bilder\Bearbeiten\Sammlung\ und sollen am Ende in
\Bilder\Fertig\Mockup\ gespeichert werden.
Dann würdest du in Zeile 8 "
level_2" angeben um in
\Bilder\ zu landen und in Zeile 9 "
/Fertig/Mockup".
Ab Zeile 80 verteilst Du die Prä- oder Suffixe auf die Aktionen.
Soll für die Datei "
abc_bildname.jpg" die
Aktion1 ausgeführt werden, gibst du den Präfix "
abc" in Zeile 82 ein.
Ab Zeile 108 werden die Speicherungen vorgenommen. Ich habe hier bereits zwei Speichervorgänge eingefügt, die du allerdings noch deinen Bedürfnissen anpassen musst. Es sollte dazu alles gut genug kommentiert sein.
Zeile 115 und Zeile 131 blenden die (fiktive) Ebene "
Die Ebene" ein und/oder aus. Es muss nicht zwangsläufig "getoggelt" werden. Die gewünschten Ebenen können auch mit
activeDocument.layers["Ebenenname"].visible = true/false; ein oder ausgeblendet werden. Achte nur darauf, dass vor dem Speichern alle gewünschten Ebenen im Mockup-Dokument entsprechend ein- oder ausgeblendet sind. (Hier bin ich davon ausgegangen, dass sich die ein- und auszublendenden Ebenen nicht im Smartobjekt befinden, da ich keinen Grund finden konnte warum das so sein sollte!)
Bei deinen Aktionen, die das (durch die Stapelverarbeitung) geöffnete Bild ins Smartobjekt verfrachten, solltest Du darauf achten, dass dieses zu Beginn der Aktion im Smartobjekt gelöscht wird.
Klingt wirr und soll heißen: Starte die Aktionsaufzeichnung mit bereits einem Bild im Smartobjekt, lösche es und füge dann das Neue ein. Andernfalls würdest du dem Smartobjekt immer wieder ein neues Bild hinzufügen, was die Rechnerleistung, spätestens nach dem 50sten Bild deutlich negativ beeinflusst.
Mache solange Testläufe mit einem Ordner mit maximal 5 Bildern, bis alles zur Zufriedenheit passt. Es wäre doof, produziert das Skript oder eine Aktion eine Fehlermeldung und man müsste diese 1000 mal bestätigen bis einen die Stapelverarbeitung aus der Schleife entlässt.
Btw.: Es spricht übrigens überhaupt nichts gegen die von
@Andre_S vorgeschlagene Vorgehensweise.