2010年5月3日月曜日

Illustrator EPSのみを.aiで別名保存する

EPSは、Illustratorで作成しても、Photoshopで作成してもどちらも拡張子は.eps。当然Windowsでは区別がつかないし、MacでもSnowLeopardからはクリエータが廃止されてしまった。
今後は拡張子が違う形式で運用していく必要がある。
なので、IllustratorEPSのみを.aiで再保存する方法を考えてみる。

まず、普通に書いた変換スクリプト。Illustrator CS3、MacOSX 10.5.8にて検証。
あまりテストしてないので、ファイルや環境によってはエラーを出すかもです。
#target "Illustrator"
(function(){

var fol=Folder.selectDialog('フォルダを選択して下さい');
if(!fol) return;

var mask=function(file){
return /^[^\.].*\.eps/i.test(file.name);
};

var files=fol.getFiles(mask);
for(var i=0,len=files.length;i<len;i++){
var file=files[i];
var doc=app.open(file, DocumentColorSpace.CMYK);
var aiFile=new File(file.absoluteURI.replace(/eps$/i,'ai'));
doc.saveAs(aiFile, undefined);
doc.close(SaveOptions.DONOTSAVECHANGES);
}

alert('処理を終わりました');

})();
これだと、maskフィルタでは.epsを判別しているだけなので、当然Photoshop EPSも全て.aiで再保存してしまう。

まず案1。Macのクリエータを使う方法。
#target "Illustrator"
(function(){

var fol=Folder.selectDialog('フォルダを選択して下さい');
if(!fol) return;

var mask=function(file){
if(/^[^\.].*\.eps/i.test(file.name)){
if(file.creator==='ART5'){
return true;
}
}
return false;
};

var files=fol.getFiles(mask);
for(var i=0,len=files.length;i<len;i++){
var file=files[i];
var doc=app.open(file, DocumentColorSpace.CMYK);
var aiFile=new File(file.absoluteURI.replace(/eps$/i,'ai'));
doc.saveAs(aiFile, undefined);
doc.close(SaveOptions.DONOTSAVECHANGES);
}

alert('処理を終わりました');

})();
maskフィルタ内で、.epsを拾った中でさらにクリエータがIllustrator形式のものだけにtrueを返している。
問題点は、Macでないと使えない事。MacでもSnowLeopard以降では動くかどうかわからない。
また、Macでもネットワークドライブ経由でコピーしたりして、クリエータを落としてしまったファイルの判別はできない。

案2。ファイルのXMPから判別する方法。
#target "Illustrator"
(function(){

var fol=Folder.selectDialog('フォルダを選択して下さい');
if(!fol) return;

var mask=function(file){
return /^[^\.].*\.eps/i.test(file.name);
};

var files=fol.getFiles(mask);
for(var i=0,len=files.length;i<len;i++){
var file=files[i];
var doc=app.open(file, DocumentColorSpace.CMYK);

var xmpStr=doc.XMPString;
var xmp=new XML(xmpStr);
var creator=xmp.xpath('/rdf:RDF/rdf:Description/xmp:CreatorTool');
if(!/Illustrator/i.test(creator)){
doc.close(SaveOptions.DONOTSAVECHANGES);
continue;
}

var aiFile=new File(file.absoluteURI.replace(/eps$/i,'ai'));
doc.saveAs(aiFile, undefined);
doc.close(SaveOptions.DONOTSAVECHANGES);
}

alert('処理を終わりました');

})();
まず.epsを判別し、一度Illustratorで開いた後、ファイルのXMPを読み出して、CreatorToolに"Illustrator"という文字が含まれていなければ保存せずに閉じる。
この方法ならWindows、Macともに使えるだろうが、ファイルにXMPを付加しない過去バージョンについては判別できない。
たぶん今も大量にあるIllustrator8形式のファイルには対応しないと思う。

案3。epsファイルのヘッダ部分を読み出す方法。
#target "Illustrator"
(function(){

var fol=Folder.selectDialog('フォルダを選択して下さい');
if(!fol) return;

var mask=function(file){
if(/^[^\.].*\.eps/i.test(file.name)){
if(file.open('r')){
var header=file.read(200);
if(/illustrator/i.test(header)){
return true;
}
}
}
return false;
};

var files=fol.getFiles(mask);
for(var i=0,len=files.length;i<len;i++){
var file=files[i];
var doc=app.open(file, DocumentColorSpace.CMYK);
var aiFile=new File(file.absoluteURI.replace(/eps$/i,'ai'));
doc.saveAs(aiFile, undefined);
doc.close(SaveOptions.DONOTSAVECHANGES);
}

alert('処理を終わりました');

})();

maskフィルタ内で.epsを拾った後、まずファイルをテキストとして一定量読み出し、そこに"illustrator"の文字が含まれているかどうかを調べ、あればtrueを返している。
これなら古いファイルにも対応するし、きっと上手くいく……と思うのだが、実際に運用してみると、ネットワークドライブのファイルを直接処理しようとするとひとつも処理できなかったり、他にも失敗する要素があるみたい。

どれが一番良いだろう?

0 件のコメント: