Encontré el siguiente código y funciona muy bien para la mayoría de los archivos de Photoshop que he probado, pero el archivo con el que quiero usarlo tiene 2 objetos inteligentes, uno anidado en el otro. Ver imágenes adjuntas.
¿Es posible editar el código para que funcione con mi archivo en particular?
Aquí está el código :
¡Gracias por la ayuda!
En su pregunta original sobre Stack Overflow, nunca mencionó que dos SO están anidados. En este caso, sugiero abrir un SO como un documento con
function editSmartObject()
{
var desc = new ActionDescriptor();
executeAction(sTID('placedLayerEditContents'), desc, DialogModes.NO);
}
Si está utilizando solo este archivo en particular como entrada, su algoritmo debería ser algo como esto, imagino en pseudocódigo:
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);
}