Wie 'Speichern unter' im selben Ordner mit der Dateibenennungsoption mit Photoshop-Aktionen?

Angenommen, ich möchte eine Schwarzweißversion aller Bilder in einem bestimmten Ordner und allen seinen Unterordnern erstellen und die Struktur der Unterordner beibehalten.

Wenn ich derzeit zu Datei -> Automatisieren -> Batch gehe, kann ich die Dateibenennung nur aktivieren, wenn ich das Ziel auf "Ordner" setze, wodurch ALLE Bilder im selben Ordner gespeichert werden. Aber stattdessen wollte ich das Bild in seinem ursprünglichen Ordner speichern und beispielsweise das Suffix _B&W hinzufügen.Photoshop Batch Speichern als Dateibenennung

Ist das möglich?

Nur per Skript. Es gibt eine batchMethode beim Skripting, sodass Sie ganz einfach Ihr eigenes benutzerdefiniertes Batch-Skript erstellen können, aber ich denke, die einfachste Methode wäre, nur das Speichern der Datei zu skripten. Es ist immer noch ein bisschen kompliziert, wenn Sie noch kein Skript erstellt haben, aber ziemlich einfach.
Das ist wirklich super! Ich wusste nicht, dass Sie Photoshop-Skripte erstellen können! Ich bin Programmierer!! VIELEN DANK!
Ok, um weiter darauf einzugehen. Das Speichern einer Datei mit einem Skript ist ziemlich einfach, selbst wenn Sie sie manuell schreiben, aber in diesem Fall würde ich empfehlen, das Plugin "Script Listener" für Photoshop zu verwenden. Es protokolliert Aktionen, die Sie als Javascript ausführen. Wenn Sie also dieses Javascript ausführen, wird es die Aktion in Photoshop ausführen. Sie erhalten also den Code zum Speichern einer Datei und ersetzen den statischen Pfad durch den aktuellen Dateipfad und fügen ihn dann am Ende Ihrer Aktion hinzu. Vielleicht schreibe ich später eine bessere Erklärung.

Antworten (2)

Wie ich in den Kommentaren kurz erklärt habe, müssten Sie an Ihrem Workflow nicht viel ändern, außer ein kleines Skript das Speichern von Dateien zu überlassen.

Diese Anweisungen mögen wie eine Menge Arbeit erscheinen, sind es aber nicht.

  1. Holen Sie sich das Scripting Listener-Plugin .
    • Dieser Link führt zur Photoshop-Skript-Referenzseite, Sie müssen nach dem Download-Link „Scripting Listener“ für Mac oder Windows etwa in der Mitte der Seite suchen.
    • Die Datei sollte in dem Ordner abgelegt werden /plug-ins/, den Sie im Photoshop-Anwendungsordner finden.
    • Photoshop neu starten.
  2. Die Verwendung des Scripting Listener-Plugins ähnelt der Verwendung von Photoshop-Aktionen, jedoch in Skriptform. Jedes Mal, wenn Sie etwas in Photoshop tun, z. B. ein neues Dokument öffnen, erstellt das Skripting-Listener-Plug-in eine ScriptingListenerJS.logauf dem Desktop aufgerufene Datei oder hängt sie an.
  3. Speichern Sie in Photoshop eine Datei in dem Dateiformat, das Sie in Ihrer Stapelverarbeitung verwenden möchten.
  4. Suchen Sie ScriptingListenerJS.lognach dem Dateinamen der Datei, die Sie gerade gespeichert haben. Sollte das Letzte sein.
    • Kopieren Sie den Code beginnend mit bis // ========zum Ende des Codeblocks.
    • Wenn Sie einen Codeblock sehen, der mit beginnt var idmodalStateChanged, können Sie diesen wahrscheinlich ignorieren. Scripting Listener begann mit der Ausgabe dieses Codeblocks bei PS CC 2015, glaube ich. Keine Ahnung, was das ist, aber das braucht man nicht. Ignoriere es einfach.
  5. Der Code, den ich bekam, als ich ein jpg mit speicherte File > Save as...:

// =======================================================
var idsave = charIDToTypeID( "save" );
    var desc17 = new ActionDescriptor();
    var idAs = charIDToTypeID( "As  " );
        var desc18 = new ActionDescriptor();
        var idEQlt = charIDToTypeID( "EQlt" );
        desc18.putInteger( idEQlt, 12 );
        var idMttC = charIDToTypeID( "MttC" );
        var idMttC = charIDToTypeID( "MttC" );
        var idNone = charIDToTypeID( "None" );
        desc18.putEnumerated( idMttC, idMttC, idNone );
    var idJPEG = charIDToTypeID( "JPEG" );
    desc17.putObject( idAs, idJPEG, desc18 );
    var idIn = charIDToTypeID( "In  " );
    desc17.putPath( idIn, new File( "/Users/joonas/Desktop/Untitled-3.jpg" ) );
    var idDocI = charIDToTypeID( "DocI" );
    desc17.putInteger( idDocI, 432 );
    var idLwCs = charIDToTypeID( "LwCs" );
    desc17.putBoolean( idLwCs, true );
    var idsaveStage = stringIDToTypeID( "saveStage" );
    var idsaveStageType = stringIDToTypeID( "saveStageType" );
    var idsaveBegin = stringIDToTypeID( "saveBegin" );
    desc17.putEnumerated( idsaveStage, idsaveStageType, idsaveBegin );
executeAction( idsave, desc17, DialogModes.NO );

  1. Jetzt muss nur noch der statische Dateipfad durch einen ersetzt werden, der auf dem aktuellen Dokumentpfad basiert. Sie können auch den Dateinamen ersetzen. Hier ist ein Beispiel, in dem ich den aktuellen Dokumentpfad verwende, einen Unterordner erstelle, den alten Dokumentnamen verwende und sicherstelle, dass die Dateierweiterung .jpg ist:

var doc = app.activeDocument;
var doc_path = doc.path;
var sub_dir_name = 'Batch Processed Files';
var sub_directory = new Folder( doc_path + '/' + sub_dir_name );
if ( !sub_directory.exists ) sub_directory.create()
var new_path = sub_directory + '/' + doc.name.split('.')[0] + '.jpg';

// =======================================================
var idsave = charIDToTypeID( "save" );
    var desc17 = new ActionDescriptor();
    var idAs = charIDToTypeID( "As  " );
        var desc18 = new ActionDescriptor();
        var idEQlt = charIDToTypeID( "EQlt" );
        desc18.putInteger( idEQlt, 12 );
        var idMttC = charIDToTypeID( "MttC" );
        var idMttC = charIDToTypeID( "MttC" );
        var idNone = charIDToTypeID( "None" );
        desc18.putEnumerated( idMttC, idMttC, idNone );
    var idJPEG = charIDToTypeID( "JPEG" );
    desc17.putObject( idAs, idJPEG, desc18 );
    var idIn = charIDToTypeID( "In  " );
    desc17.putPath( idIn, new File( new_path ) );
    var idDocI = charIDToTypeID( "DocI" );
    desc17.putInteger( idDocI, 432 );
    var idLwCs = charIDToTypeID( "LwCs" );
    desc17.putBoolean( idLwCs, true );
    var idsaveStage = stringIDToTypeID( "saveStage" );
    var idsaveStageType = stringIDToTypeID( "saveStageType" );
    var idsaveBegin = stringIDToTypeID( "saveBegin" );
    desc17.putEnumerated( idsaveStage, idsaveStageType, idsaveBegin );
executeAction( idsave, desc17, DialogModes.NO );

  1. Speichern Sie dieses Skript als .jsxDatei.
    • Sie können es im PS-Skriptordner ablegen, dies ist jedoch nicht erforderlich.
  2. Sie können die Ausführung eines Skripts in Ihren PS-Aktionen aufzeichnen, gehen Sie also zu dem, das ActionSie im Batch-Prozess verwenden werden, und starten Sie die Aufzeichnung. Folgendes wird an Ihre Aktion angehängt. Stellen Sie einfach sicher, dass Sie vor der Aufnahme ein gespeichertes Dokument geöffnet haben.
    • Gehen Sie zu File > Scripts > Browse...und suchen Sie die von Ihnen erstellte Skriptdatei.
    • Stoppen Sie die Aufzeichnung, nachdem das Skript Ihre aktuelle Datei gespeichert hat.

Wenn Sie jetzt den Batch ausführen, aber auswählen Destination: None, sollte jede Datei in einem Ordner relativ zur geöffneten Datei in einem eigenen Unterordner gespeichert werden.

Das ist toll. Hier ist der neue Speicherort des ScriptingListener-Plug-ins .

Ich wollte nur ein Dialogfeld zum Speichern als JPG erhalten, also löschte ich das Unterverzeichnis und musste DialogModes.NOzu DialogModes.ALL. Das Skript wird im Skriptmenü angezeigt, wenn Sie es einfügen /Applications/Adobe Photoshop <your version>/Presets/Scriptsund neu starten. Ich habe eine Aktion davon erstellt und es funktioniert gut. Ich konnte keinen anderen Weg finden, dies zu tun. Es sollte nicht so schwierig sein, etwas so Natürliches wie das Speichern einer Datei im gleichen Format wie das Original zu tun.