Ersetzen eines Smart-Objekts in großen Mengen durch die variablen Daten oder Skripte von Photoshop

Gibt es eine Möglichkeit, das Ersetzen eines Smart Image durch eine andere Grafik zu automatisieren?

Wenn ich zum Beispiel ein Masterbild einer Tasse habe und nach einiger Bearbeitung eine große Anzahl flacher rechteckiger Bilder/Designs auf der Tasse haben möchte. Ich habe ein intelligentes Bild mit einem der Designs erstellt und es mit einigen Filtern optimiert, um es weniger rechteckig zu machen (Perspektive anpassen, Ober- und Unterseite an die Krümmung des Bechers anpassen usw.).

Jetzt muss ich herausfinden, wie ich (wenn möglich) Variablen verwenden kann, um das Bild im Smart Object zu ersetzen, damit die gleichen Transformationen/Filter für jedes Bild ausgeführt werden, das dann auf der Tasse platziert und gespeichert wird.

Ich sehe dieses Tutorial , das die Grundlagen variabler Daten erklärt und zeigt, wie Bilder als Daten verwendet werden – aber es ist mir nicht klar, wie ich damit das Smart-Objekt aktualisieren soll, damit alle Transformationen auf die Bilder angewendet werden.

Wenn Variablen mit Smart Objects nicht funktionieren, bin ich auch offen für die Verwendung eines Skripts. (Ich hätte gerne einen Ausschnitt darüber, wie man ein intelligentes Objekt per Skript aktualisiert, falls jemand eines hat, da ich noch nie zuvor Skripte mit Photoshop verwendet habe).

Smart Objects kann man damit eigentlich nicht aktualisieren, mal ein Skript schreiben
Ich werde die Frage aktualisieren, um Details zu Skripten als akzeptable Lösung aufzunehmen.
Es gibt einen schnelleren Weg. Versuchen Sie es mit einem Skript. Es sind einige online verfügbar - suchen Sie einfach danach. Es wird den gesamten Ordner mit Bildern erstellen, ohne die oben genannten Anweisungen zu verwenden.

Antworten (3)

Ich habe diese Seite gefunden , die eine Antwort enthält, die dem entspricht, wonach Sie suchen. Ich habe sie so geändert, dass sie mit der neuesten Version funktioniert und hoffentlich Ihren Anforderungen besser entspricht.

So verwenden Sie es:

  1. Speichern Sie den folgenden Code in einer Datei mit einer .jsErweiterung
  2. Öffnen Sie Ihre Vorlagendatei und wählen Sie das SmartObject aus
  3. Gehe zuFile->Scripts->Browse
  4. Suchen Sie Ihre .jsDatei und öffnen Sie sie
  5. Wählen Sie Ihre Bilder/Designs aus und öffnen Sie sie
  6. Du bist fertig!

Inhalt der .js-Datei:

// Replace SmartObject’s Content and Save as PSD
// 2017, use it at your own risk
#target photoshop
if (app.documents.length > 0) {
    var myDocument = app.activeDocument;
    var theName = myDocument.name.match(/(.*)\.[^\.]+$/)[1];
    var thePath = myDocument.path;
    var theLayer = myDocument.activeLayer;
    // PSD Options;
    psdOpts = new PhotoshopSaveOptions();
    psdOpts.embedColorProfile = true;
    psdOpts.alphaChannels = true;
    psdOpts.layers = true;
    psdOpts.spotColors = true;
    // Check if layer is SmartObject;
    if (theLayer.kind != "LayerKind.SMARTOBJECT") {
        alert("selected layer is not a smart object")
    } else {
        // Select Files;
        if ($.os.search(/windows/i) != -1) {
            var theFiles = File.openDialog("please select files", "*.psd;*.tif;*.jpg", true)
        } else {
            var theFiles = File.openDialog("please select files", getFiles, true)
        };
        if (theFiles) {
            for (var m = 0; m < theFiles.length; m++) {
                // Replace SmartObject
                theLayer = replaceContents(theFiles[m], theLayer);
                var theNewName = theFiles[m].name.match(/(.*)\.[^\.]+$/)[1];
                // Save JPG
                myDocument.saveAs((new File(thePath + "/" + theName + "_" + theNewName + ".psd")), psdOpts, true);
            }
        }
    }
};
// Get PSDs, TIFs and JPGs from files
function getFiles(theFile) {
    if (theFile.name.match(/\.(psd|tif|jpg)$/i) != null || theFile.constructor.name == "Folder") {
        return true
    };
};
// Replace SmartObject Contents
function replaceContents(newFile, theSO) {
    app.activeDocument.activeLayer = theSO;
    // =======================================================
    var idplacedLayerReplaceContents = stringIDToTypeID("placedLayerReplaceContents");
    var desc3 = new ActionDescriptor();
    var idnull = charIDToTypeID("null");
    desc3.putPath(idnull, new File(newFile));
    var idPgNm = charIDToTypeID("PgNm");
    desc3.putInteger(idPgNm, 1);
    executeAction(idplacedLayerReplaceContents, desc3, DialogModes.NO);
    return app.activeDocument.activeLayer
};
Danke! Ich hatte noch keine Gelegenheit, dies zu testen, aber es kommt dem am nächsten, worum ich gebeten habe, also werde ich Ihnen das Kopfgeld zusprechen.
Lassen Sie mich wissen, wenn Sie damit Probleme haben. Ich habe es mit einer Datei getestet, die drei Ebenen enthielt (das Smart-Objekt, eine Bildebene und einen Hintergrund) und in zwei Versionen von Ps, CC 2017 und CS6. Es lief VIEL schneller in CC als CS6, und beachten Sie, dass die PSD gespeichert werden muss, bevor Sie das Skript ausführen können.
Dieses Skript funktioniert genau so, wie ich es mir erhofft hatte! Vielen Dank! Für alle, die es in Zukunft verwenden, stellen Sie einfach sicher, dass die Smart-Objekt-Ersetzungen genau die gleichen Abmessungen haben, einschließlich Auflösung. Und ich habe es geändert, um es als JPG statt als PSD zu speichern – gist.github.com/laryn/0a1f6bf0dab5b713395a835f9bfa805c
Eine Verbesserung (für die Massennutzung) wäre, irgendwie zu vermeiden, dass der Speicher knapp wird. Derzeit wird jede Ersetzung im Photoshop-Verlauf gespeichert und kann bei einem riesigen Ordner nach einer großen Anzahl von Ersetzungen zu Speicherfehlern führen. Ich bin mir nicht sicher, ob Sie eine Möglichkeit kennen, zu ersetzen, zu speichern und dann aus dem Speicher zu entfernen, bevor Sie zum nächsten gehen, aber das wäre an dieser Stelle mein einziger Vorschlag!
Ich habe das gefunden , ich werde versuchen, es in den nächsten Tagen zu implementieren und zu testen, aber ich dachte, ich würde weitermachen und es posten ...
Danke für das Skript. Das Skript funktioniert perfekt, wenn das Smart-Objekt nicht an die Form der Flasche angepasst wurde. Ich habe eine Flasche und möchte die Etiketten auf der Flasche automatisieren. Das Etikett ist ein intelligentes Objekt, das als .psb in meiner PSD-Datei geöffnet wird. Wenn ich das Skript ausführe, ändert sich das Etikettenbild in ein kleines Quadrat und ich habe die Form des Etiketts verloren, damit es wie ein Teil der Flasche aussieht. Das Label-Smart-Objekt wurde im Warp-Modus gebogen. Wie kann das Skript auf diese Weise verwendet werden? Vielen Dank im Voraus. Elisabeth
@CircleB Hallo, könnten Sie bitte bei dieser ähnlichen Frage helfen? Danke. graphicdesign.stackexchange.com/questions/128280/…
Außerdem, wenn Sie Speicherplatz sparen möchten und nicht viel Unordnung im Verlaufsfenster haben möchten. Sie können den Verlauf aussetzen und einen einzelnen Schritt anzeigen. Anstatt 50 oder wie viele Zustände auch immer dieses Skript erstellen wird, reduziert diese Methode es auf einen einzigen Schritt. Sie können auch alles in 1 Funktion packen, um sicher zu gehen// Suspend History // Better for memory, doesnt clutter history when doing a lot automation MainFunctionNAME.main = function() { MainFunctionNAME(); } app.activeDocument.suspendHistory("HISTORY STATE NAME", 'MainFunctionNAME.main()');
Ich weiß leider nicht, wie ich den Code richtig einfüge. Dieser Misteditor nimmt immer wieder Retouren oder Enters?!?!
@ElizabethMartin jemand müsste dieses Skript aktualisieren und zusätzliche Schritte hinzufügen. Ich denke, es würde eine ziemliche Überholung erfordern, da die Schritte ganz anders sind. Sie können auch eine Aktion ausführen und dann Ihr Bild in einem manuellen Schritt auswählen und platzieren und dann eine automatische Speicherung durchführen. Das sollte auch funktionieren. Sehen Sie sich dieses Bild an, ich denke, das wird für Sie funktionieren. Wenn man diese Aktion dann im Batch ausführt funktioniert es. Obwohl Skripting schöner wäre, weil Sie es alle Teile automatisieren lassen können, aber das ist schwieriger vollständig. i.ibb.co/cY3V4Ck/recorded-edit-mockup-exmple.png
Ich kann dieses Skript von @CircleB ändern, damit es für das Muckup-Design verwendet werden kann. Es würde einen zusätzlichen Code benötigen, um zu funktionieren. Hat jemand eine Beispiel-PSD mit sagen wir 3 Bildern, die verlinkt werden müssen. So habe ich eine gute Testdatei

Öffnen Sie die Tassen-PSD. Halten Sie die Tassenebene unter dem gewünschten Bild und Sie können alle gewünschten Bilder auf der Tasse importieren und Aktionen für die perspektivischen Anpassungen aufzeichnen. Spielen Sie diese Aktionen auf jeder Ebene ab, die das gewünschte Bild auf der Tasse enthält. Sie können alle Bilder entweder mithilfe von Aktionen oder manuell in intelligente Objekte konvertieren, es sind nur zwei Klicks erforderlich. Sie können der aufgezeichneten Aktion auch eine Funktionstaste zuweisen, sodass Sie einfach eine Taste drücken können und die Ausgabe in dem Ordner abgelegt wird, den Sie während der Aufzeichnung der Aktion ausgewählt haben. Dies sollte es mit einem Knopfdruck machen, wenn die Automatisierung nicht abgeschlossen ist. aber das ist das Beste, was Sie erreichen können, ohne codieren zu müssen. Wenn Sie immer noch eine vollständige Automatisierung anstreben, müssen Sie etwas Code schreiben.

Das intelligente Objekt enthält bereits alle Anpassungen. Ich muss alle Bilder in das Smart-Objekt importieren und dann die Mug-Datei (in der das Smart-Objekt platziert und angepasst ist) für jedes von Hunderten oder Tausenden von Bildern erneut speichern. Haben Sie Beispielskripts, die eine Anleitung zum Aktualisieren eines intelligenten Objekts darstellen?
Nein, ändern Sie nicht die Bilder im Smart-Objekt, erstellen Sie einfach ein Smart-Objekt für jedes Bild, das Sie auf die Tasse legen möchten, und wenden Sie mithilfe von Aktionen dieselben Effekte auf jede Smart-Objekt-Ebene an. und führen Sie eine weitere Aktion aus, die das Dokument nur in einem Ordner speichert und nach dem Speichern die oberste Smart-Objekt-Ebene löscht. und macht dasselbe immer wieder, bis alle Bilder auf der Tasse sind. ps: dafür brauchst du kein script. Versuchen Sie, mehr über Aktionen zu erfahren, und Sie werden verstehen, was ich sage.

Wenn jemand ein Testdokument profilieren kann. Ich habe eine Versionsarbeit, die das Smart-Objekt öffnet und eine neue Ebene platziert, es schließt und dann eine neue Datei speichert. Ich sehe viele Leute, die diese Anfrage nach Mockup-Vorlagen stellen.

Ich habe den Code geändert und etwas funktioniert codiert. Ich brauche jedoch eine richtige Testdatei, um zu sehen, ob das Skript gut und wie erwartet funktioniert.

Hoffe, das bekommt keine kleinen Downvotes, irgendwie grausam, wie man hier antwortet