Ausgabe
Ich stecke ein bisschen fest. Ich habe ein Skript für Photoshop erstellt, das eine PSD-Datei mit einigen Ebenen und einer verknüpften Ebene öffnet, eine Art Vorlage.
Bisher habe ich die Dinge für mich zum Laufen gebracht, indem ich ein Droplet erstellt habe, das die folgenden Schritte und Skripts ausführt:
- Öffnen der abgelegten Datei/des abgelegten Bildes.
- Öffnen der PSD-Datei (Öffnungsvorlage, scripted).
- Aktualisieren aller Smart-Objekte (einschließlich der verknüpften Ebene, aber begrenzt durch einen bestimmten Namen und Ort) (keine skriptbasierte, aufgezeichnete Aktion).
- Anwenden der Vorlagenfunktionen auf diesen verknüpften Layer, der zuvor aktualisiert wurde (Skript).
- Speichert eine PNG-Datei (scripted),
- Und schließlich das Schließen geöffneter Bild- und Vorlagendokumente (aufgezeichnete Aktion).
Bis jetzt ist alles gut. Aber das hat eine Einschränkung. Es funktioniert jeweils nur mit einer Datei mit einem bestimmten Namen an einem bestimmten Ort. Damit beispielsweise die verknüpfte Ebene aktualisieren funktioniert, muss der Name des Bildes in diesem Fall nur im Downloads-Ordner 1.png lauten.
Meine Frage lautet also: Wie kann ich dies skripten, um eine Iteration des Updates auf der verknüpften Ebene auszuführen, wobei die auf das Droplet abgelegten Bilder als Quelle(n) verwendet werden, unabhängig von Dateitypen (png, jpg usw.), Name, Speicherort , und die Ausgabe gespeicherter PNG-Datei(en) indizieren? (1.png, 2.png, 3.png usw.)
Lösung
Ich begann mit der Arbeit an meinem Ansatz und den zuvor erwähnten Schritten:
1 – Öffnen der Datei/des Bildes, das auf das Photoshop-Droplet gezogen wird.
Dies würde automatisch mit der Datei geschehen – Photoshop öffnet die Datei, die auf das Droplet abgelegt wird, und löst so die festgelegte Aktionssequenz aus. Schritt eins gelöst. Nächste!
2 – Öffnen der PSD-Datei (Öffnungsvorlage, scripted)
Mit diesem Schritt habe ich ein Skript geschrieben, das die Vorlagendatei öffnet. Der erste Schritt in der Aktionssequenz wäre dies!
var template = new File("/Users/name/Desktop/Folder/Template.psd"); // Of course, you can have your template file anywhere on your computer as long as the path to find it is correct. I have selected my desktop for testing purposes.
app.open(template);
Das war ein weiteres müheloses. Nächste!
3 – Aktualisieren aller Smart-Objekte (einschließlich der verknüpften Ebene, aber begrenzt durch einen bestimmten Namen und Ort) (nicht geskriptete, aufgezeichnete Aktion)
Ich musste sicherstellen, dass die Vorlage ihren zuvor verknüpften Layer-Speicherort für die Aktualisierung leicht finden würde, damit dieser dritte Schritt funktioniert. Ich weiß, dass es Möglichkeiten gibt, dies mit einem Skript zu aktualisieren, aber ich wollte nicht daran basteln. Das war mir zu diesem Zeitpunkt und mit meinem begrenzten Wissen zu umständlich. Daher habe ich mich entschieden, das Notwendige zu berücksichtigen, damit die Vorlage einen vertrauten Dateinamen findet, nach dem sie suchen würde, wenn die Aktion „Alle geänderten Inhalte aktualisieren“ ausgelöst wird.
In diesem Stadium sind zwei Dateien in Photoshop geöffnet, eine das Anfangsbild, das als neue Quelle für die Vorlage dient, und die zweite Datei template.psd, die die verknüpfte Ebene enthält, die mit dem Inhalt der aktualisiert werden muss erste Datei.
Zuerst habe ich eine Kopie des Bildes mit dem Namen gespeichert, nach dem die Vorlage suchen würde, wenn sie nach dem Namen der verknüpften Ebene sucht. Als Nächstes habe ich eine Kopie der Vorlage unter Verwendung des Speicherorts der ersten Bilddatei gespeichert, um die ursprüngliche Vorlage vor all diesen Aktionen zu schützen. Und drittens habe ich die Aktion „Alle geänderten Inhalte aktualisieren“ ausgelöst. Und voila, alles hat funktioniert. Die ursprüngliche Vorlage hatte die verknüpfte Datei daneben. Die neue Vorlagenkopie würde also die Datei daneben suchen und finden, am selben Ort, Ordner/Speicherort, wie es beim Vorschauschritt passiert ist, der dazu beigetragen hat, sie als solche zu speichern.
// The following script will retrieve the path of the opened image and will save a copy that matches the name of the linked layer in the template in the same location.
var image_doc = app.documents[0]; //If two or more documents are opened, this approach will help switch between them.
var image_name = image_doc.name;
var image_path = app.documents[0].path.fsName;
var temp_image = new File("" + image_path + "/" + image_name + "");
var opts, file;
opts = new ExportOptionsSaveForWeb();
opts.format = SaveDocumentType.PNG;
var image_temp_name = "link.png";
pngFile = new File("" + image_path + "/" + image_temp_name + "");
image_doc.exportDocument(pngFile, ExportType.SAVEFORWEB, opts);
// Save a copy of the template.psd in the same location as the image and the link.png file needed to update the linked layer.
var temp_template = new File("" + image_path + "/" + image_name + "");
app.open(template);
var opts, file;
opts = new PhotoshopSaveOptions();
opts.format = SaveDocumentType.PHOTOSHOP;
var template_temp_name = "template.psd";
psdFile = new File(image_path + "/" + template_temp_name);
psdSaveOptions = new PhotoshopSaveOptions();
psdSaveOptions.embedColorProfile = true;
psdSaveOptions.alphaChannels = true;
activeDocument.saveAs(psdFile, psdSaveOptions, false, Extension.LOWERCASE);
// After these Update all Modified Content action
Nun, vier, fünf und sechs sind einfach:
4 – Anwenden der Vorlagenfunktionen auf diesen verknüpften Layer, der gerade zuvor aktualisiert wurde (Skript). Fertig!
5 – Speichert die neu gebildete Vorlage als PNG-Datei (Skript). Fertig!
6 – Und schließlich das Schließen geöffneter Bild- und Vorlagendokumente (aufgezeichnete Aktion). Fertig!
Beantwortet von – Milea
Antwort geprüft von – Robin (FixError Admin)