После моих исследований на раз. Я нашел простой способ получить информацию о срезе по сценарию.
Как вы выяснили, нет прямого способа получить доступ к срезу как к выделению.
Но когда вы разрезаете область в ps, она отправляет событие!
Итак, вы можете добавить прослушиватель событий к этому событию, а в обработчике событий вы можете получить ActionDescriptor, а когда вы получите ActionDescriptor, вы получите все!
Если вы установили ScriptListener, вы можете найти ActionDescriptor, как показано ниже:
var idMk = charIDToTypeID( "Mk " );
var desc2 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref1 = new ActionReference();
var idslice = stringIDToTypeID( "slice" );
ref1.putClass( idslice );
desc2.putReference( idnull, ref1 );
var idUsng = charIDToTypeID( "Usng" );
var desc3 = new ActionDescriptor();
var idType = charIDToTypeID( "Type" );
var idsliceType = stringIDToTypeID( "sliceType" );
var iduser = stringIDToTypeID( "user" );
desc3.putEnumerated( idType, idsliceType, iduser );
var idAt = charIDToTypeID( "At " );
var desc4 = new ActionDescriptor();
var idTop = charIDToTypeID( "Top " );
var idPxl = charIDToTypeID( "#Pxl" );
desc4.putUnitDouble( idTop, idPxl, 83.000000 );
var idLeft = charIDToTypeID( "Left" );
var idPxl = charIDToTypeID( "#Pxl" );
desc4.putUnitDouble( idLeft, idPxl, 229.000000 );
var idBtom = charIDToTypeID( "Btom" );
var idPxl = charIDToTypeID( "#Pxl" );
desc4.putUnitDouble( idBtom, idPxl, 144.000000 );
var idRght = charIDToTypeID( "Rght" );
var idPxl = charIDToTypeID( "#Pxl" );
desc4.putUnitDouble( idRght, idPxl, 327.000000 );
var idRctn = charIDToTypeID( "Rctn" );
desc3.putObject( idAt, idRctn, desc4 );
var idslice = stringIDToTypeID( "slice" );
desc2.putObject( idUsng, idslice, desc3 );
executeAction( idMk, desc2, DialogModes.NO );
Итак, если бы мы могли получить этот ActionDescriptor, мы могли бы получить информацию о Rectangle!
Теперь мы начнем с добавления прослушивателя событий (здесь я использую ExtendScript, также доступный в javascript)
private const MK_INT:int = Photoshop.app.charIDToTypeID("Mk "); // event name
CSXSInterface.instance.evalScript("PhotoshopRegisterEvent", MK_INT); // add event listener
ExternalInterface.addCallback("PhotoshopCallback" + CSXSInterface.getInstance().getExtensionId(), myPhotoshopCallback); // event handler
тогда делаем в обработчике событий:
private function myPhotoshopCallback(eventID:Number, descID:Number):void {
var desc2:ActionDescriptor = new ActionDescriptor();
desc2.fromID(descID);
// there ! we got the ActionDescriptor!
// now we need to filter the event
if (eventID == MK_INT) {
var idUsng:Number = Photoshop.app.charIDToTypeID( "Usng" );
var classID:Number = desc2.getObjectType(idUsng);
if (classID == Photoshop.app.stringIDToTypeID("slice")) {
var desc3:ActionDescriptor = desc2.getObjectValue(idUsng);
var idAt:Number = Photoshop.app.charIDToTypeID("At ");
var idRctn:Number = Photoshop.app.charIDToTypeID( "Rctn" );
if (idRctn == desc3.getObjectType(idAt)) {
var desc4:ActionDescriptor = desc3.getObjectValue(idAt);
var idTop:Number = Photoshop.app.charIDToTypeID( "Top " );
var idLeft:Number = Photoshop.app.charIDToTypeID( "Left" );
var idBtom:Number = Photoshop.app.charIDToTypeID( "Btom" );
var idRght:Number = Photoshop.app.charIDToTypeID( "Rght" );
trace("top: " + desc4.getUnitDoubleValue(idTop));
trace("left: " + desc4.getUnitDoubleValue(idLeft));
trace("bottom: " + desc4.getUnitDoubleValue(idBtom));
trace("right: " + desc4.getUnitDoubleValue(idRght));
}
}
}
}
Как видите, мы получаем ActionDescriptor, мы можем получить любую информацию об этом дескрипторе!
Я пытался и работал!