Skip to content

Instantly share code, notes, and snippets.

@chepe263
Forked from ruandre/AiFitToArtboard.jsx
Created June 10, 2016 18:12
Show Gist options
  • Save chepe263/03a7c2d88a729e8d030dfa02509c01d9 to your computer and use it in GitHub Desktop.
Save chepe263/03a7c2d88a729e8d030dfa02509c01d9 to your computer and use it in GitHub Desktop.
Adobe Illustrator script to resize objects proportionally to fit inside the artboard.
/*
License: GPLv2 or later
Adobe Illustrator script to resize objects proportionally to fit inside the artboard.
Works in CS6 (should work in later versions).
Doesn't work in CS3 (and probably won't work in earlier versions).
Based on the fine work of these folks:
Carlos Canto, dbburgess
https://forums.adobe.com/message/4164590
http://aiscripts.com/2012/09/fit-object-to-artboard/
How to use:
1) Create a new document with the desired artboard size.
2) Paste an object into this newly created document.
3) Select the object and run this script.
4) Profit.
Known bugs:
Centering is kinda buggy at times - it doesn't seem
to work after changing the artboard size, for example :(
Future versions, maybe:
- Just scale the object/don't duplicate?
- Modify the script to create a new document so that
it can be run from any file with an object selected?
*/
// Current document and selection:
var activeDoc = app.activeDocument,
selection = activeDoc.selection;
// Check if anything is selected:
if (selection.length > 0) {
// Loop over selected items:
for (i = 0; i < selection.length; i++) {
var item = selection[i].duplicate(),
abActive = activeDoc.artboards[
activeDoc.artboards.getActiveArtboardIndex()
],
abProps = getArtboardBounds(abActive),
boundsDiff = itemBoundsDiff(selection[i]);
// Scale object to fit artboard:
fitItem(item, abProps, boundsDiff);
}
} else {
alert("Select an object before running this script.");
}
// Artboard bounds helper (used above):
function getArtboardBounds(artboard) {
var bounds = artboard.artboardRect,
left = bounds[0],
top = bounds[1],
right = bounds[2],
bottom = bounds[3],
width = right - left,
height = top - bottom,
props = {
left : left,
top : top,
width : width,
height : height
};
return props;
}
// Bounds difference helper (used at the top):
function itemBoundsDiff(item) {
var itemVB = item.visibleBounds,
itemVW = itemVB[2] - itemVB[0],
itemVH = itemVB[1] - itemVB[3],
itemGB = item.geometricBounds,
itemGW = itemGB[2] - itemGB[0],
itemGH = itemGB[1] - itemGB[3],
deltaX = itemVW - itemGW,
deltaY = itemVH - itemGH,
diff = {
deltaX: deltaX,
deltaY: deltaY
};
return diff;
}
// Fit item helper (used at the top):
function fitItem(item, props, diff) {
// Cache current values:
var oldWidth = item.width; // alert(oldWidth);
var oldHeight = item.height; // alert(oldHeight);
// Wide or tall?
if (item.width > item.height) {
// alert('wide');
item.width = props.width - diff.deltaX;
// Scale height using ratio from width:
var ratioW = item.width / oldWidth;
item.height = oldHeight * ratioW;
} else {
// alert('tall');
item.height = props.height - diff.deltaY;
// Scale width using ratio from height:
var ratioH = item.height / oldHeight;
item.width = oldWidth * ratioH;
}
// Center:
item.top = 0 - ((props.height / 2) - (item.height / 2));
item.left = (props.width / 2) - (item.width / 2);
// Deselect:
item.selected = false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment