Ausgabe
Ich möchte, dass Photoshop die folgende Aufgabe für einen bestimmten Ordner automatisch ausführt:
- Laden Sie alle PNG-Dateien in einen bestimmten Ordner.
- Konvertieren Sie den Modus jeder Datei in
RGB color
- Fügen Sie jeder Datei eine Ebene hinzu
- Speichern Sie die Dateien als PSD im selben Ordner
Mir wurde gesagt, dass dies mit Photoshop-Skripting möglich ist, aber ich weiß nicht, wie ich anfangen soll, da ich leider nicht viel Erfahrung mit JavaScript habe.
Eine Sache, die ich weiß, ist, dass ich die obige Aufgabe nicht ausführen kann, Actions
da Photoshop beim Aufzeichnen des letzten Schritts (4) die Aktion zum Speichern der PSD-Dateien in dem Ordner aufzeichnet, den ich beim Aufzeichnen des Makros verwende (anstelle des verwendet, um die ursprünglichen PNG-Dateien zu laden). Mit anderen Worten, es fixiert den Zielordner auf den im Makro verwendeten.
Dies bringt mich zu folgender Frage: Gibt es eine Möglichkeit, den Photoshop-Javascript-Code automatisch zu generieren, der eine bestimmte Aktion ausführt ?
Wenn ja, hätte ich nichts dagegen zu lernen, wie man das Skript ändert, um das obige Ordnerproblem zu beheben.
Lösung
Ich habe ein Skript erstellt, das die erforderliche Aufgabe erfüllt:
#target photoshop
#strict on
runthis();
function runthis()
{
var path = "/d/PhotoshopScript/Images/";
var inputFolder = new Folder(path );
var inputFiles = inputFolder.getFiles("*.png");
for(index in inputFiles)
{
// open the file
var fileToOpen = new File(inputFiles[index]);
open(fileToOpen);
// Change mode to rgb
activeDocument.changeMode(ChangeMode.RGB);
// add a new layer
activeDocument.artLayers.add();
//save
var psdOptions = new PhotoshopSaveOptions();
psdOptions.alphaChannels = true;
psdOptions.annotations = false;
psdOptions.embedColorProfile = false;
psdOptions.layers = true;
psdOptions.spotColors = false;
var file = new File(path + GetFileName(String(inputFiles[index])));
activeDocument.saveAs(file, psdOptions);
activeDocument.close();
// dispose
fileToOpen = null;
psdOptions = null;
file = null;
}
// dispose
inputFolder = null;
inputFiles = null;
}
function GetFileName(fullPath)
{
var m = fullPath.match(/(.*)[\/\\]([^\/\\]+)\.\w+$/);
return m[2];
}
Es kann in vielerlei Hinsicht verbessert werden, aber ich hoffe, es hilft.
Beantwortet von – jani
Antwort geprüft von – Cary Denson (FixError Admin)