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

イラストレーターに貼り付けたクリッピングパス付きのPSD画像は倍率の表示がおかしいことに気がついたので、
イラストレーターに貼り付けた画像をフォトショップで適した解像度に修正するスクリプトを修正。
Photoshop側で「PSD」かつ「クリッピングパス付」の場合は倍率を再計算するようにしてみました。
あと、「CreatorPhotoshopじゃない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]);
})();