Mehrfach-Panorama-Automatisierung in Photoshop

Mein Workflow beinhaltet das Erstellen mehrerer Panoramen in Photoshop nacheinander. Ich habe mehrere Ordner, jeder mit JPEGs, die zu einem Panorama kombiniert und mit einer PSD-Erweiterung gespeichert werden müssen.

Photoshop leistet gute Arbeit bei der Erstellung des Panoramas, aber ich verschwende viel Zeit damit, bei den sich wiederholenden Schritten einzugreifen, Ordner und deren Inhalt auszuwählen, sie in der Panoramabox zu öffnen und die erforderlichen Panoramaoptionen auszuwählen (einschließlich der Überprüfung der Neupositionierung und der Deaktivierung der Überblendung). Bilder zusammen), bevor Photoshop seine magische Fotozusammenführung vornimmt. Außerdem verschwende ich Zeit im Speichern-Dialogfeld, um jedes Bild zu speichern, nachdem das Panorama erstellt wurde.

Ich wollte wissen, ob es ein Skript gibt, das diese ganze Aufgabe automatisieren kann. Damit ich den übergeordneten Ordner (der die Ordner mit den Fotos enthält, die zusammengefügt werden müssen) zur Verfügung stelle und den Computer stundenlang lasse, während er die Fotozusammenführung verarbeitet und die resultierenden PSD-Dateien speichert, ohne dass ich daneben sitzen muss. Ich habe das Gefühl, dass dies möglich ist, weil sich alle Schritte wiederholen.

Alte Foren haben Lösungen für viele ähnliche Probleme, wobei Assistenten Skripte dafür erstellen, aber keiner der Links funktioniert jetzt.

Hallo und willkommen bei GDSE. Ja, es sollte mit Skripten möglich sein, denke ich, aber Ihrer Frage fehlen einige Punkte, z. B. wie genau Sie ein solches Bild erstellen und ersetzen und welche Art von Ebenen Sie haben usw. Wenn möglich, können Sie einen Screenshot zum besseren Verständnis freigeben :)

Antworten (1)

Hier habe ich dieses Skript von Mike Hale leicht modifiziert. Dieses Skript fragt nach einem Ordner und verarbeitet dann alle Unterordner mit Bildern. Dinge zu ändern:

  1. Stellen Sie sicher, dass der Pfad zu Ihrem Photoshop-Skriptordner korrekt ist (Zeile 2);
  2. Dieses Skript sucht nach .pngDateien, ändern Sie die Erweiterung in Zeile 24 ( folders[i].getFiles('*.png'););
  3. PSDs werden in jedem Unterordner gespeichert.

Ergebnis (ich habe einige zufällige Google-Bilder für den Test genommen):

Geben Sie hier die Bildbeschreibung ein

var runphotomergeFromScript = true; // must be before Photomerge include
//@includepath "/C/Program Files/Adobe/Adobe Photoshop CC 2019/Presets/Scripts/"
//@include "Photomerge.jsx"
//@show include

var psdOpts = new PhotoshopSaveOptions();
psdOpts.embedColorProfile = true;
psdOpts.alphaChannels = true;
psdOpts.layers = true;

(function()
{
    var workFolder = Folder.selectDialog();
    if (workFolder == null) return false;

    var folders = workFolder.getFiles(function(file)
    {
        return file instanceof Folder;
    });

    if (folders.length == 0) return false

    for (var i = 0; i < folders.length; i++)
    {

        var fList = folders[i].getFiles('*.png');

        // override Photomerge.jsx settings. Default is "Auto". Uncomment to override the default.
        //photomerge.alignmentKey = "Auto";
        //photomerge.alignmentKey   = "Prsp";
        //photomerge.alignmentKey   = "cylindrical";
        //photomerge.alignmentKey   = "spherical";
        //photomerge.alignmentKey   = "sceneCollage";
        photomerge.alignmentKey = "translation"; // "Reposition" in layout dialog   

        // other setting that may need to be changed. Defaults below
        photomerge.advancedBlending = false; // 'Blend Images Together' checkbox in dialog
        photomerge.lensCorrection = false; // Geometric Distortion Correction'checkbox in dialog
        photomerge.removeVignette = false; // 'Vignette Removal' checkbox in dialog

        try
        {
            if (fList.length > 1)
            {
                photomerge.createPanorama(fList, false);
            }
        }
        catch (e)
        {
            alert(e + '\nLine: ' + e.line)
        }
        // saving
        var saveFile = {
            name: folders[i].name,
            path: fList[0].parent
        }

        savePSB(saveFile)
        saveTIF(saveFile)
        saveJPG(saveFile)
        savePSD(saveFile)

        activeDocument.close(SaveOptions.DONOTSAVECHANGES);
    }
})()

function savePSB(data)
{
    var desc = new ActionDescriptor();
    var descCompatibility = new ActionDescriptor();
    descCompatibility.putBoolean(stringIDToTypeID('maximizeCompatibility'), true);
    desc.putObject(charIDToTypeID('As  '), charIDToTypeID('Pht8'), descCompatibility);
    desc.putPath(charIDToTypeID('In  '), new File(data.path + "/" + data.name + ".psb"));
    executeAction(charIDToTypeID('save'), desc, DialogModes.NO);
}; // end of savePSB()

function saveTIF(data)
{
    var desc = new ActionDescriptor();
    var descOptions = new ActionDescriptor();
    descOptions.putEnumerated(charIDToTypeID('BytO'), charIDToTypeID('Pltf'), charIDToTypeID('Mcnt'));
    descOptions.putEnumerated(stringIDToTypeID('layerCompression'), charIDToTypeID('Encd'), stringIDToTypeID('RLE'));
    desc.putObject(charIDToTypeID('As  '), charIDToTypeID('TIFF'), descOptions);
    desc.putPath(charIDToTypeID('In  '), new File(data.path + "/" + data.name + ".tif"));
    executeAction(charIDToTypeID('save'), desc, DialogModes.NO);
}; // end of saveTIF()

function saveJPG(data)
{
    if (data.path == undefined) return false;
    data.name = data.name == undefined ? activeDocument.name : data.name;
    data.quality == undefined && data.quality = 75

    var options = new ExportOptionsSaveForWeb(),
        jpgFile = new File(data.path + '/' + data.name + '.jpg');
    options.format = SaveDocumentType.JPEG;
    options.quality = data.quality;
    activeDocument.exportDocument(jpgFile, ExportType.SAVEFORWEB, options);
}

function savePSD(data)
{
    var desc = new ActionDescriptor();
    var descOptions = new ActionDescriptor();
    descOptions.putBoolean(stringIDToTypeID('maximizeCompatibility'), true);
    desc.putObject(charIDToTypeID('As  '), charIDToTypeID('Pht3'), descOptions);
    desc.putPath(charIDToTypeID('In  '), new File(data.path + "/" + data.name + ".psd"));
    executeAction(charIDToTypeID('save'), desc, DialogModes.NO);
} // end of savePSD()
Tausend Dank für das Skript! Es funktioniert großartig und tut Wunder für meinen Workflow. Ich möchte Ihnen nochmals dafür danken, dass Sie mir dabei geholfen haben. Es funktioniert auch gut mit allen meinen erforderlichen Dateitypen. Ich möchte Ihnen zwei Fragen zum Drehbuch stellen. Erstens gibt es eine Möglichkeit, dass der Dateiname der gespeicherten PSD in den Namen des Ordners geändert wird, anstatt in "abgeschlossen". Und zweitens, gibt es eine Möglichkeit, die Datei auch als psb-Dokument oder als tif-Dokument zu speichern? Ich habe versucht, mit den letzten Zeilen herumzuspielen, aber es schien nicht zu funktionieren.
Ich habe meine Antwort aktualisiert. Diese Version speichert sowohl psbals auch tifunter dem Namen eines Ordners zum Zusammenführen von Dateien. Wenn Sie nur eine der Dateien benötigen, entfernen Sie einfach Zeile 58 oder 59.
Sergej! Ich möchte Sie noch einmal stören. Was wären die Änderungen am Code, um die endgültige Datei als JPEG zu speichern?
:) Ich habe meine Antwort aktualisiert. saveJPG()verwendet Photoshops Save For Web und kann auch qualityals optionales Argument empfangen werden (standardmäßig 75). Wenn Sie mit einer anderen Qualität speichern möchten, ändern Sie das Argument in etwas wiesaveJPG({name: folders[i].name, path: fList[0].parent, quality: 90})
Lieber Sergey, ich hoffe, Sie haben die schwierigen Zeiten gut überstanden. Vielen Dank, dass Sie mir mit diesem Skript geholfen haben. Es gibt nur eine kleine Frage, die ich stellen wollte. Manchmal, wenn Photoshop die Bilder nicht korrekt zusammenführen kann, wird diese Skriptwarnung in einem Popup angezeigt: „Einige Bilder konnten nicht automatisch ausgerichtet werden“. Dadurch wird das obige Skript angehalten und ich muss "OK" drücken, bevor der Vorgang fortgesetzt wird. Gibt es eine Möglichkeit, diesen Vorgang des Klickens auf "OK" zu automatisieren und fortzufahren, ohne das Skript anzuhalten? Gib mir Bescheid. Danke noch einmal!
Hallo. Ich denke, Sie können diese Zeile im Skriptcode finden und kommentieren, um die Nachricht zu deaktivieren
Sicher! Klingt relativ einfach. Wäre es möglich, dass Sie mich anleiten, wie das geht? Danke!
Ich habe Sie geführt: Ich habe geschrieben, was zu tun ist :) Entschuldigung, diese Antwort sollte kein kostenloser Skript-Job sein
Danke für deine Hilfe Sergey!
Es gibt nur ein letztes Problem, dem ich mit Ihrem Skript gegenüberstehe, das es daran hindert, zu funktionieren. Es gibt mir immer wieder diese Meldung "Fehler 21: undefiniert ist kein Objekt. Zeile 53 -> var saveFile = { " Lassen Sie mich wissen, wie ich das vermeiden kann
@AbPro vielleicht hast du es falsch kopiert? es sollte gut funktionieren