///////////////////////////////////////////////////////////////// //Resize by Luminance v.1.0.0.0 //>=-------------------------------------- // // Resizes all selected objects to a percentage of the objects original size // new size is based on the relative brightness of the objects fillColor. // // aka: Make Halftones in Illustrator!!! // // Designed to be used with mosaics generated from // embedded images. // Good tutorial on making Mosaics here // Further explanation on my blog //>=-------------------------------------- // JS code (c) copyright: John Wundes ( john@wundes.com ) www.wundes.com //copyright full text here: http://www.wundes.com/js4ai/copyright.txt ////////////////////////////////////////////////////////////////// var versionNum = app.version.split(".")[0]; var doc = activeDocument; var sel = doc.selection; var objectFail = 0; var selLen = sel.length; // get document colorspace: if (doc.documentColorSpace==DocumentColorSpace.RGB) { averageColorSpace = averageRGB; }else if (doc.documentColorSpace==DocumentColorSpace.CMYK) { averageColorSpace = averageCMYK; } if ( sel[0].typename == "GroupItem") { alert("You have selected a group item, please ungroup and try again."); }else { var msg = "Will the image be viewed against a black background?\n"; msg += " Yes = Lighter is bigger, darker is smaller\n"; msg += " No = Darker is bigger, lighter is smaller" var whiteHeavy = confirm(msg); if (whiteHeavy) { var match=0; }else{ var match=255; } if (versionNum >= 13) { var w = new Window('window', "Resizing Objects", undefined, {independent:true}); w.frameLocation = [200,200]; w.tracker = w.add ('statictext' , [15,15,250,35], "processing"); w.prog = w.add ('progressbar' , [15,15,250,35], 0, selLen); w.show(); } //==========START LOOP==================== //step backwards so we can dynamically remove objects... for (var each=selLen-1;each>=0;each--) { var gray = averageColors(sel[each].fillColor); //alert(gray); if (versionNum >= 13) { w.prog.value++; w.tracker.text ="Resizing "+w.prog.value+" of "+selLen+" objects."; } //alert ("gray:"+gray+", match:"+match); if (gray==match) { sel[each].remove(); }else{ //it must be a value: // now reduce it to a percentace of 1. gray = 1/(gray); if ( !whiteHeavy) { gray = 1-gray; } // reassign var ob = sel[each]; var otop=ob.top; var oleft=ob.left; var ow= ob.width; var oh = ob.height; ob.width *= gray; ob.height *= gray; ob.top = otop-(oh/2 - ob.height/2); ob.left = oleft+(ow/2 - ob.width/2); ob.selected=false; } } //==============END LOOP=================== if (versionNum >= 13) { w.close(); } if(objectFail ==1){ alert("Some objects were not understood."); } }//end if not groupitem //====================END MAIN====================== function averageColors(col){ try{ if (col.typename=="GrayColor") { match=whiteHeavy ? 100 :0; //invert it because 100 == black, not white like RGB... out = 100/(100-col.gray); if (out==Infinity) { out=100; } return out; }else if (col.typename=="SpotColor"){ match= whiteHeavy? 100:0; //invert it because 100 == tint, not white like RGB... var out = 100/(100-col.tint); if (out==Infinity) { out=100; } return out; } //if we got this far, it must be RGB or CMYK, otherwise, fail... return(averageColorSpace(col)); } catch(e){ objectFail = 1; return 100; } } function averageRGB(col){ match=whiteHeavy? 0:255; return 255/((col.red + col.green + col.blue)/3); } function averageCMYK(col){ match= whiteHeavy? 100:0; // inverse because 100 = tint, not white like RGB var out = 100/(100-((col.cyan + col.magenta + col.yellow + col.black)/4)); if (out==Infinity) { out=100; } return out; }