-
-
Save ruandre/7b47cbf2a4c55dac9adb to your computer and use it in GitHub Desktop.
/*************************** | |
NOT MAINTAINED! from ~2014 | |
****************************/ | |
// cs4+ script for resizing objects proportionally to fit inside artboard | |
// based on: https://forums.adobe.com/message/4164590 | |
// usage: create a new document with desired artboard size, paste object, select it, run this script | |
// bugs: centering does not work after changing artboard size | |
var activeDoc = app.activeDocument | |
var selection = activeDoc.selection | |
// check if anything is selected | |
if (selection.length > 0) { | |
for (var i = 0; i < selection.length; i++) { | |
var item = selection[i].duplicate() | |
var abActive = | |
activeDoc.artboards[activeDoc.artboards.getActiveArtboardIndex()] | |
var abProps = getArtboardBounds(abActive) | |
var boundsDiff = itemBoundsDiff(selection[i]) | |
fitItem(item, abProps, boundsDiff) // scale object to fit artboard | |
} | |
} else { | |
alert('Select an object before running this script') | |
} | |
function getArtboardBounds(artboard) { | |
var bounds = artboard.artboardRect | |
var left = bounds[0] | |
var top = bounds[1] | |
var right = bounds[2] | |
var bottom = bounds[3] | |
var width = right - left | |
var height = top - bottom | |
var props = { left: left, top: top, width: width, height: height } | |
return props | |
} | |
function itemBoundsDiff(item) { | |
var itemVB = item.visibleBounds | |
var itemVW = itemVB[2] - itemVB[0] // right - left | |
var itemVH = itemVB[1] - itemVB[3] // top - bottom | |
var itemGB = item.geometricBounds | |
var itemGW = itemGB[2] - itemGB[0] // right - left | |
var itemGH = itemGB[1] - itemGB[3] // top - bottom | |
var deltaX = itemVW - itemGW | |
var deltaY = itemVH - itemGH | |
var diff = { deltaX: deltaX, deltaY: deltaY } | |
return diff | |
} | |
function fitItem(item, props, diff) { | |
var oldWidth = item.width | |
var oldHeight = item.height | |
if (item.width > item.height) { | |
// landscape, scale height using ratio from width | |
item.width = props.width - diff.deltaX | |
var ratioW = item.width / oldWidth | |
item.height = oldHeight * ratioW | |
} else { | |
// portrait, scale width using ratio from height | |
item.height = props.height - diff.deltaY | |
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 | |
} |
Very useful, thanks! Btw., the fact that it's not working in CS3 isn't it simply due to the .jsx extension? Somewhere I saw recommendation to change the extension from .jsx to .js fo CS, but I haven't tried that yet, as I use later version.
@aholub just this at the end:
var docSelected = app.activeDocument.selection; for (j=0; j<docSelected.length; j++) docSelected[j].remove();
Check this out:
https://gist.github.com/shivendra14/5147b529001da1458a0017c866f633b9
modified this to scale artwork and artboard :)
and this one to scale up assets:
https://gist.github.com/shivendra14/f135d6279a20053a62a798be5da5e174
Hi Your script works great but i need to scale the object with scale & stroke effects on. Is it possible, please help me
This script is almost there... on Illustrator CC it doesn't place the resized object in its parent artboard. I'm an amateur at ExtendScript - hoping for a fix!
Same here, selected the object - fits perfect the size but not in the middle of the artboard. Any trick to solve this? Very nice script because we really need it to make paint-decals for a new game.
Thank you for the script!