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!
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);
}