Ersetzen eines Smart-Objekts in großen Mengen durch Photoshop-Skript; Bearbeiten von Skripten für mehr als ein Smart-Objekt

Ich habe den folgenden Code gefunden und er funktioniert sehr gut für die meisten Photoshop-Dateien, die ich ausprobiert habe, aber die Datei, mit der ich ihn verwenden möchte, hat 2 Smart-Objekte, von denen eines in dem anderen verschachtelt ist. Siehe beigefügte Bilder.

Ist es möglich, den Code so zu bearbeiten, dass er mit meiner bestimmten Datei funktioniert?

Hier ist der Code :

Danke für die Hilfe!

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Antworten (1)

In Ihrer ursprünglichen Frage zu Stack Overflow haben Sie nie erwähnt, dass zwei SOs verschachtelt sind. In diesem Fall schlage ich vor, eine SO als Dokument mit zu öffnen

function editSmartObject()
{
    var desc = new ActionDescriptor();
    executeAction(sTID('placedLayerEditContents'), desc, DialogModes.NO);
}

Wenn Sie nur diese bestimmte Datei als Eingabe verwenden, sollte Ihr Algorithmus ungefähr so ​​​​aussehen, wie ich es mir in Pseudocode vorstelle:

var originaldocument = activeDocument,
    files = File.openDialog(...);

for file in files
    activeDocument = originaldocument; //selecting the original document
    editSmartObject() //opening SO for editing
    editSmartObject() //opening the second SO for editing
    // optionally remove a layer from previous iteration: activeDocument.activeLayer.remove()
    placeImage(file) //placing image to SO
    activeDocument.activeLayer.resize() //resize the placed layer if you need to
    activeDocument.close(SaveOptions.SAVECHANGES) //closing the second SO and saving changes
    activeDocument.close(SaveOptions.SAVECHANGES) //closing the first SO and saving changes
    saveJPG(); //save jpg with all the SO updated


function placeImage(imageFile)
{
    alert(imageFile);
    var desc554 = new ActionDescriptor();
    desc554.putPath(cTID('null'), imageFile);
    desc554.putEnumerated(cTID('FTcs'), cTID('QCSt'), cTID('Qcsa'));
    var desc555 = new ActionDescriptor();
    desc555.putUnitDouble(cTID('Hrzn'), cTID('#Pxl'), 0.000000);
    desc555.putUnitDouble(cTID('Vrtc'), cTID('#Pxl'), 0.000000);
    desc554.putObject(cTID('Ofst'), cTID('Ofst'), desc555);
    executeAction(cTID('Plc '), desc554, DialogModes.NO);
};

function editSmartObject()
{
    var desc = new ActionDescriptor();
    executeAction(sTID('placedLayerEditContents'), desc, DialogModes.NO);
}