ここぽんのーと

コードとデザインの境界に生きるエンジニアの、雑多な記録帳。

[Illustrator] JavaScriptで指定した領域をエクスポートする

2013/07/15, cocopon

Illustratorのスクリプトで、一部の領域のみをエクスポートする方法が見つからず試行錯誤したので書いておきます。

エクスポートする

まず、Illustratorでエクスポートするには?
Illustrator Scripting Referenceを開き、「export」で検索します。

Document methodsの項に、「exportFile」を発見。

exportFile(exportFile, exportFormat [,options])
Exports the document to the specified file using one of the predefined export file formats. The appropriate file extension is automatically appended to the file name, except for Photoshop® documents. For these, you must include the file extension (PSD) in the file specification.

第2引数でフォーマットを、第3引数でその他のオプションを指定するようです。
オプションは、同じく「export」で検索すると出てくる「ExportOptions〜」クラスのインスタンスを渡します。

  • ExportOptionsAutoCAD
  • ExportOptionsFlash
  • ExportOptionsGIF
  • ExportOptionsJPEG
  • ExportOptionsPhotoshop
  • ExportOptionsPNG8
  • ExportOptionsPNG24
  • ExportOptionsSVG
  • ExportOptionsTIFF

今回はPNG形式で出力したかったので、ExportOptionsPNG24の項を参照します。

領域指定のオプションが…ない

調べる前は、「options.exportRectみたいな感じで、エクスポート領域を指定できるんだろう」と思っていたのですが…見つからない。
領域に関する設定は、「artBoardClipping」のみ。

artBoardClipping
If true, the exported image be clipped to the art board.
Default: false

これをtrueに設定すると、アートボードの範囲にクリップされるようです。
つまり、アートボードの大きさをエクスポートしたい領域に合わせれば、指定した領域のエクスポートが実現できるはず。

アートボードのサイズを変更する

同様にリファレンスを辿りながら、こんな感じでアートボードの領域が取得できました。

var doc = app.activeDocument;
var artboards = doc.artboards;
var artboard = artboards[artboards.getActiveArtboardIndex()];

alert(artboard.artboardRect);

2013-07-15 09.13.33

このartboardRectを変更することで、アートボードのサイズが変更できます。

var doc = app.activeDocument;
var artboards = doc.artboards;
var artboard = artboards[artboards.getActiveArtboardIndex()];

artboard.artboardRect = [0, 0, 200, -300];

関数にする

アートボードのサイズを変更しっぱなしでは、ユーザが困ってしまいます。もとに戻してあげるまでがスクリプトの仕事です。
副作用なく使えるように、関数としてまとめておきましょう。

function exportPng24(document, rect, file) {
    var artboards = document.artboards;
    var artboard = artboards[artboards.getActiveArtboardIndex()];
    
    // アートボードの領域を覚えておく (あとで元に戻す)
    var prevRect = artboard.artboardRect;
    
    // アートボードをエクスポートしたい領域に変更する
    artboard.artboardRect = rect;
    
    // アートボード領域でクリップするように設定
    var options = new ExportOptionsPNG24();
    options.artBoardClipping = true;
    
    // エクスポート!
    document.exportFile(file, ExportType.PNG24, options);
    
    // アートボードの領域を元に戻す
    artboard.artboardRect = prevRect;
}


var document = app.activeDocument;
var file = new File('~/Desktop/hoge.png');
exportPng24(document, [0, 0, 200, -300], file);

(補足)アートボードの大きさを選択オブジェクトに合わせる

前の例では領域を直接指定しましたが、選択オブジェクトに合わせる場合はDocument#fitArtboardToSelectedArtが使えます。
オブジェクトの選択は、someObject.selected = true;です。