イラストレーターに貼り付けた画像をフォトショップで適した解像度に修正するスクリプト[修正版]
イラストレーターに貼り付けたクリッピングパス付きのPSD画像は倍率の表示がおかしいことに気がついたので、
イラストレーターに貼り付けた画像をフォトショップで適した解像度に修正するスクリプトを修正。
Photoshop側で「PSD」かつ「クリッピングパス付」の場合は倍率を再計算するようにしてみました。
あと、「CreatorがPhotoshopじゃないEPS」または「PDF」の場合は処理させないようにしました。
#include 'c.js';//http://svn.coderepos.org//share/platform/illustrator/javascript/lib/c.js #include 'matrixConvert.jsx';//http://d.hatena.ne.jp/kamiseto/20090502/1241251512 #target 'illustrator'; (function(){ var default_reso = 350; var reso = prompt ('解像度(pixel/inch)とを数字で入力してください。不正な文字が入力された場合はデフォルトの350pixel/inchで計算します。', 350, '解像度(pixel/inch)となる数字を入力して下さい。')*1; if(reso == 0 || typeof reso !== 'number')reso = default_reso; //Photoshop Resize Image Function function ResizeImage(file,hs,vs,reso){ open(File(file)); var myDoc = app.activeDocument; var hasClippingPath = (function(){ for(i=0;i<app.activeDocument.pathItems.length;i++)if(app.activeDocument.pathItems[i].kind == PathKind.CLIPPINGPATH)return true; return false; })(); var isPSD = (function(){ var f = new File(app.activeDocument.fullName); f.open('r'); var h = (f.read('4')); f.close(); return h == '8BPS' ? true : false; })(); if(isPSD && hasClippingPath){ hs = hs*(myDoc.resolution/72); vs = vs*(myDoc.resolution/72); } myDoc.resizeImage (UnitValue((myDoc .width.as('pixel'))*hs*reso/myDoc.resolution,'pixel'), UnitValue((myDoc .height.as('pixel'))*vs*reso/myDoc.resolution,'pixel'),reso, ResampleMethod.BICUBICSHARPER); } // function FinalImageSize(ImgObj){ var info = getPlacedItemInfo(ImgObj); if(info['type'] == 'PDF')return; if(info['type'] == 'EPSF' && info['creator'].match(/Photoshop/) != 'Photoshop')return false; var mat = matrixConvert.getAll(ImgObj); // if(0.7 < ((mat.hs*mat.vs)/10000) && ((mat.hs*mat.vs)/10000) < 1.3)return; try{ var bt=new BridgeTalk(); bt.target = 'photoshop'; bt.body = uneval (ResizeImage)+"('"+ImgObj.file+"',"+mat.hs/100+","+mat.vs/100+","+reso+");"; bt.onError = function (btObj) {alert( btObj.body + " (" + btObj.headers ["Error-Code"] + ")" ); }; bt.send(); }catch(e){ throw(e); } } function getPlacedItemInfo(pi){ if(pi.file.exists){ var info = { 'type' :'', 'creator' : '', 'color' : '' }; var f = new File(pi.file); var g = ""; var header = ""; f.open('r'); switch(g = f.read(4)){ case '8BPS' : f.seek(0,0); /* while(header = f.readln()){ if(header)tmph = header; }; f.seek((-1*tmph.length)-8,1); */ info['type'] = 'PSD'; break; case '%!PS' : f.seek(0,0); var header = (f.read(1000)); info['type'] = 'EPSF'; //Creator if(creator = header.match (/%%Creator:(.+)/))info['creator'] = creator[1]; //Duotobe if(duotone = header.match(/%%DocumentCustomColors: \((.+)\)/))info['color'] =duotone[1]; //CMYK or GrayScales if(colors = header.match (/%%DocumentProcessColors:\s(.+)/))info['color'] = colors[1]; break; case '%PDF' : info['type'] = 'PDF'; //break; default : /* f.seek(0,0); //$.writeln(g); while(header = f.readln()){$.writeln(header);} */ break; } f.close(); } return info; } c("S").filter("placedItems").each(FinalImageSize); //FinalImageSize(app.activeDocument.placedItems[0]); })();