イラストレーターに貼り付けた画像をフォトショップで適した解像度に修正するスクリプト

イラストレーターにJPEG画像を縮小率5%で貼り付けてそのまんま。
解像度1000pixel/inchオーバー、RIPは余裕でメモリオーバー…。
ということでスクリプトを書いてみた。

BridgeTalkを使うと、非同期なので
イラストレーターがわりと早い段階で開放されるのが好くもあり、悪くもある。
画像が多いと、後ろで一生懸命にがんばるフォトショップが健気。


追記:どうやら配置してある画像によってはうまくいかないようです。
詳細はイラストレーターに貼り付けたクリッピングパス付きのPSD画像は倍率の表示がおかしいを見てください。

#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;
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 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);
	}
}

c("S").filter("placedItems").each(FinalImageSize);
//FinalImageSize(app.activeDocument.placedItems[0]);
})();


たぶん、PDFにした後、AcrobatやDistillerでやっつけちゃうのが今風。