公開日:2017年3月1日
IllustratorやPhotoshopでは、アートボードやレイヤーに名前をつけてアセット書き出しができますが、これをInDesignでもやりたい。ということで、InDesignでアセット書き出し(もどき)スクリプトを作りました。これでInDesignからでもパーツを書き出せるってもんです。ただし、png書き出しがCS6からの機能なので、CS5.5以前ではスクリプトが動きません。
動作確認はMac10.8、InDesign CS6で行っています。
「自動書き出しではなくオブジェクトを選択しないと動かない」「一度に複数オブジェクトは書き出せない」「フォルダごと更新はされない」などの本家アセット書き出しとの相違点があります。
2017年3月3日現在、複数オブジェクトに対応しましたので、一部内容を改訂しています。
以下、手順を記載します。
まずは、書き出すオブジェクトに[レイヤー]パネルから名前をつけます。IllustratorやPhotoshopと違って、名前部分を何度もクリックしないとアクティブになりません。 いざ[レイヤー]パネルをちゃんと使う段になって気がつく直してほしいところ…
選択しているオブジェクトは、パネル右端の■が水色になります。
[レイヤー]パネルで名前をつけ、書き出したいオブジェクトを選択したら(複数可)、スクリプトを実行します。
試しに、名前のないオブジェクト、一部と重なっているオブジェクトを紛れ込ませています。
書き出しが終了した旨が報告されます。オブジェクトを選択していない場合はアラートが出て何も起こりません。
書き出しが終了しました。該当のファイルは、開いているinddファイルと同階層に「[inddファイル名]-assets」フォルダが新規作成され、保存されています(作例では「mj-assetter-test-assets」)。
名無しのオブジェクトは常に「.png」というファイル名で書き出されるので、それを書き出し処理の最中に削除するような処理をしています(実際には書き出されているけど最終的にはなくなっているという結果)。
もっと大きい画像を書き出したい場合は、「pngobj.exportResolution = 72;」の数値(解像度を示しています)を大きくしてください。現状では、InDesignのドキュメントプロファイルがWebのとき、オブジェクトサイズが等倍、2倍のものが書き出される設定です。
/*
mj-assetter(マジあせったー)
InDesignでIllustratorやPhotoshopのアセット書き出しもどきをするスクリプトです。
レイヤーパネルで名前をつけたオブジェクトを選択しているとき、
選択したオブジェクトを通常サイズ、2倍サイズ、カラーと1Cをpngで書き出します。
名無しのオブジェクトは書き出し時に削除されます。
pngファイルは、開いているInDesignと同階層に作成された「inddファイル名-assetsフォルダ」に保存されます。
動作:InDesignCS6~
*/
//フォルダパス取得
var DocPath = app.activeDocument.filePath;
//今開いているInDesignファイルの名前
var FileObj=app.activeDocument.name;
result = FileObj.indexOf(".");
inddname = FileObj.substr(0, result);
//保存用新規フォルダ作成
var fldname=DocPath+"/"+inddname+"-assets";
var CrtFldr = new Folder (fldname);
CrtFldr.create();
///png書き出しオプション1
function exp1(){
var pngobj= app.pngExportPreferences;
pngobj.exportingSpread = false;
pngobj.exportResolution = 72;
pngobj.pngColorSpace = PNGColorSpaceEnum.RGB;
pngobj.transparentBackground = true;
pngobj.pngQuality =PNGQualityEnum.HIGH;
folderRef = new Folder (fldname+"/"+ObjName+".png");//保存するフォルダ(ファイルパスを指定)
selobj[N].exportFile(ExportFormat.PNG_FORMAT,folderRef);
var DeleteFile1;
DeleteFile1 = new File(fldname+"/"+".png");
DeleteFile1.remove();
}
//png書き出しオプションx2
function expx2(){
var pngobj= app.pngExportPreferences;
pngobj.exportingSpread = false;
pngobj.exportResolution = 144;
pngobj.pngColorSpace = PNGColorSpaceEnum.RGB;
pngobj.transparentBackground = true;
pngobj.pngQuality =PNGQualityEnum.MAXIMUM;
folderRef = new Folder (fldname+"/"+ObjName+"_x2"+".png");//保存するフォルダ(ファイルパスを指定)
selobj[N].exportFile(ExportFormat.PNG_FORMAT,folderRef);
var DeleteFile2;
DeleteFile2 = new File(fldname+"/"+"_x2"+".png");
DeleteFile2.remove();
}
//png書き出しオプション1C1
function exp1gr(){
var pngobj= app.pngExportPreferences;
pngobj.exportingSpread = false;
pngobj.exportResolution = 72;
pngobj.pngColorSpace = PNGColorSpaceEnum.GRAY;
pngobj.transparentBackground = true;
pngobj.pngQuality =PNGQualityEnum.HIGH;
folderRef = new Folder (fldname+"/"+ObjName+"_1C"+".png");//保存するフォルダ(ファイルパスを指定)
selobj[N].exportFile(ExportFormat.PNG_FORMAT,folderRef);
var DeleteFile3;
DeleteFile3 = new File(fldname+"/"+"_1C"+".png");
DeleteFile3.remove();
}
//png書き出しオプション1Cx2
function expx2gr(){
var pngobj= app.pngExportPreferences;
pngobj.exportingSpread = false;
pngobj.exportResolution = 144;
pngobj.pngColorSpace = PNGColorSpaceEnum.GRAY;
pngobj.transparentBackground = true;
pngobj.pngQuality =PNGQualityEnum.MAXIMUM;
folderRef = new Folder (fldname+"/"+ObjName+"_x2"+"_1C"+".png");//保存するフォルダ(ファイルパスを指定)
selobj[N].exportFile(ExportFormat.PNG_FORMAT,folderRef);
var DeleteFile4;
DeleteFile4 = new File(fldname+"/"+"_x2"+"_1C"+".png");
DeleteFile4.remove();
}
//ここから書き出し処理
try{
var selobj = app.activeDocument.selection;
var selcount =selobj.length;
if(selobj==0){
alert("オブジェクトが選択されていません。");
}else{
for(var N=selcount-1; N > -1 ;N--)
{
var ObjName = selobj[N].name;
exp1();
expx2();
exp1gr();
expx2gr();
};
alert("選択したオブジェクトが"+fldname+"に書き出されました。名前のついていなかったオブジェクトは書き出されていません")
};
}
catch(e){
alert("オブジェクトが選択されていません。");
};