Соотнесите один размер слоя с другим пропорционально - 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);
  };

0 ответов

Другие вопросы по тегам