Соотнесите один размер слоя с другим пропорционально - Javascript PS Extendscript
Здравствуйте, я пытаюсь сопоставить размеры двух слоев в Photoshop с наиболее близким значением с определением приоритетов ширины и высоты. Как изображение выше, я пытаюсь сохранить пропорцию layer1 все еще, но чтобы соответствовать layer2 способом.
Я новичок в JavaScript, но я попробовал этот код, он просто сопоставляет layer1 и layer2 для того же размера и позиции.
Как мы можем сделать этот код умнее? (Или, если мой код такой грязный, то приветствуется новый пример кода:))
#target photoshop
app.bringToFront();
cTID = function(s) { return app.charIDToTypeID(s); };
sTID = function(s) { return app.stringIDToTypeID(s); };
var defaultRulerUnits = preferences.rulerUnits;
preferences.rulerUnits = Units.PIXELS;
doc = app.activeDocument;
#target photoshop
doc = app.activeDocument;
//app.activeDocument.activeLayer = app.activeDocument.layers.getByName('Layer1');
layer1 = doc.layers.getByName('Layer1');
layer2 = doc.layers.getByName('Layer2');
layer1size = [];
layer2size = [];
getLayerSize(layer1);
layer1size.push(width,height);
getLayerSize(layer2);
layer2size.push(width,height);
layer1width = layer1size[0];
layer1height = layer1size[1];
layer2width = layer2size[0];
layer2height = layer2size[1];
$.write ("Layer1W:" + layer1width + "\rLayer1H:" + layer1height + "\rLayer2W:" + layer2width + "\rLayer2H:" + layer2height + "\r");
widthpercentagedifference = 100* (layer2width / layer1width);
heightpercentagedifference = 100 * (layer2height / layer1height);
$.write (widthpercentagedifference + "\r");
$.write (heightpercentagedifference+ "\r");
doc.activeLayer = doc.layers.getByName('Layer1');
layer1 = ReSize(widthpercentagedifference,heightpercentagedifference);
layer1x = doc.activeLayer.bounds[0].value;
layer1y = doc.activeLayer.bounds[1].value;
doc.activeLayer = doc.layers.getByName('Layer2');
layer2x = doc.activeLayer.bounds[0].value;
layer2y = doc.activeLayer.bounds[1].value;
doc.activeLayer = doc.layers.getByName('Layer1');
var deltaX = layer2x-layer1x;
var deltaY = layer2y-layer1y;
doc.activeLayer.translate (deltaX, deltaY);
function getLayerSize(layer){
width = layer.bounds[2]-layer.bounds[0]; //Grab the width
height = layer.bounds[3]-layer.bounds[1]; //Grab the height
width = width.toString().replace(' px', '');
height = height.toString().replace(' px', '');
return width,height
}
function ReSize(widthperc,heightperc) {
var desc1 = new ActionDescriptor();
desc1.putEnumerated(cTID('FTcs'), cTID('QCSt'), sTID("QCSAverage"));
var desc2 = new ActionDescriptor();
desc2.putUnitDouble(cTID('Hrzn'), cTID('#Pxl'), 0);
desc2.putUnitDouble(cTID('Vrtc'), cTID('#Pxl'), 0);
desc1.putObject(cTID('Ofst'), cTID('Ofst'), desc2);
desc1.putUnitDouble(cTID('Wdth'), cTID('#Prc'), widthperc); // Width
desc1.putUnitDouble(cTID('Hght'), cTID('#Prc'), heightperc); // Height
executeAction(cTID('Trnf'), desc1, DialogModes.NO);
};