Created
September 30, 2015 15:38
-
-
Save jawinn/ab4df1c33d0743e41fd3 to your computer and use it in GitHub Desktop.
Fit Layer To Canvas - Photoshop Script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// FIT LAYER TO CANVAS | |
// via https://forums.adobe.com/message/5413957#5413957 | |
var maintainAspectRatio;// set to true to keep aspect ratio | |
if(app.documents.length>0){ | |
app.activeDocument.suspendHistory ('Fit Layer to Canvas', 'FitLayerToCanvas('+maintainAspectRatio+')'); | |
} | |
function FitLayerToCanvas( keepAspect ){// keepAspect:Boolean - optional. Default to false | |
var doc = app.activeDocument; | |
var layer = doc.activeLayer; | |
// do nothing if layer is background or locked | |
if(layer.isBackgroundLayer || layer.allLocked || layer.pixelsLocked | |
|| layer.positionLocked || layer.transparentPixelsLocked ) return; | |
// do nothing if layer is not normal artLayer or Smart Object | |
if( layer.kind != LayerKind.NORMAL && layer.kind != LayerKind.SMARTOBJECT) return; | |
// store the ruler | |
var defaultRulerUnits = app.preferences.rulerUnits; | |
app.preferences.rulerUnits = Units.PIXELS; | |
var width = doc.width.as('px'); | |
var height =doc.height.as('px'); | |
var bounds = app.activeDocument.activeLayer.bounds; | |
var layerWidth = bounds[2].as('px')-bounds[0].as('px'); | |
var layerHeight = bounds[3].as('px')-bounds[1].as('px'); | |
// move the layer so top left corner matches canvas top left corner | |
layer.translate(new UnitValue(0-layer.bounds[0].as('px'),'px'), new UnitValue(0-layer.bounds[1].as('px'),'px')); | |
if( !keepAspect ){ | |
// scale the layer to match canvas | |
layer.resize( (width/layerWidth)*100,(height/layerHeight)*100,AnchorPosition.TOPLEFT); | |
}else{ | |
var layerRatio = layerWidth / layerHeight; | |
var newWidth = width; | |
var newHeight = ((1.0 * width) / layerRatio); | |
if (newHeight >= height) { | |
newWidth = layerRatio * height; | |
newHeight = height; | |
} | |
var resizePercent = newWidth/layerWidth*100; | |
app.activeDocument.activeLayer.resize(resizePercent,resizePercent,AnchorPosition.TOPLEFT); | |
} | |
// restore the ruler | |
app.preferences.rulerUnits = defaultRulerUnits; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you jawinn! Really useful script. But it doesn't fit layer proportionally. I fixed it:
// FIT LAYER TO CANVAS
// via https://forums.adobe.com/message/5413957#5413957
var maintainAspectRatio = true; // set to true to keep aspect ratio
if (app.documents.length > 0) {
app.activeDocument.suspendHistory('Fit Layer to Canvas', 'FitLayerToCanvas(' + maintainAspectRatio + ')');
}
function FitLayerToCanvas(keepAspect) {
// keepAspect: Boolean - optional. Default to false
var doc = app.activeDocument;
var layer = doc.activeLayer;
// do nothing if layer is background or locked
if (layer.isBackgroundLayer || layer.allLocked || layer.pixelsLocked || layer.positionLocked || layer.transparentPixelsLocked) return;
// do nothing if layer is not a normal artLayer or Smart Object
if (layer.kind != LayerKind.NORMAL && layer.kind != LayerKind.SMARTOBJECT) return;
// store the ruler
var defaultRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
var width = doc.width.as('px');
var height = doc.height.as('px');
var bounds = app.activeDocument.activeLayer.bounds;
var layerWidth = bounds[2].as('px') - bounds[0].as('px');
var layerHeight = bounds[3].as('px') - bounds[1].as('px');
// move the layer so the top-left corner matches the canvas top-left corner
layer.translate(new UnitValue(0 - bounds[0].as('px'), 'px'), new UnitValue(0 - bounds[1].as('px'), 'px'));
if (keepAspect) {
var layerRatio = layerWidth / layerHeight;
var canvasRatio = width / height;
} else {
// scale the layer to match the canvas
layer.resize((width / layerWidth) * 100, (height / layerHeight) * 100, AnchorPosition.TOPLEFT);
}
// restore the ruler
app.preferences.rulerUnits = defaultRulerUnits;
}