JavaScript
illustrator

Illustrator CC で ai ファイル内のすべてのアートボードを複数サイズのPNG出力するスクリプト

概要

検索してもまとまった形では見つからなかったのでメモしておきます。

例えば foo.ai というファイルの中に board1, board2 というアートボードがあり、それらをサイズ 48x48, 96x96, 192x192 のPNG形式で Desktop/Icons 以下に出力したい場合を考えます。

Desktop
|- Icons
    |
    |- foo (<== 新規フォルダ作成)
        |
        |- 48 (<== 新規フォルダ作成)
        |   |- board1.png
        |   |- board2.png
        |
        |- 96 (<== 新規フォルダ作成)
        |   |- board1.png
        |   |- board2.png
        |
        |- 192 (<== 新規フォルダ作成)
            |- board1.png
            |- board2.png

前提

  • 各アートボードの width, height は同じ値とします

変更履歴

  • 2018/10/18
    • コードセクションの TrimLast 関数のインデックスがずれている問題を修正

コード

好きな名前のテキストファイル(下例では "export_png.jsx") を作成してテキストエディタを以下のように編集します。

export_png.jsx
/// --- 関数定義 (*エラー処理とかは無視) ---

// path で指定された新規フォルダ作成
function CreateFolder(path)
{
    var f = Folder(path);
    if(!f.exists) { f.create(); }
}

// inStr 末尾から lastStr で指定された文字列を取り除く
function TrimLast(inStr, lastStr)
{
    var idx = inStr.lastIndexOf(lastStr);
    if(idx > 0)
    {
        return inStr.substr(0, idx);
    }
    else
    {
        return inStr;
    }
}

function SavePNG(expFolderPath, doc)
{
    app.activeDocument = doc;

    opts = new ExportOptionsPNG24();
    // アートボード毎に処理しますよというフラグ
    opts.artBoardClipping = true;
    // その他の出力オプション(お好みで)
    opts.matte = false;
    opts.transparency = true;

    const ORG_SIZE = doc.height;

    // 48, 96, 192 出力サイズそれぞれについて処理
    var sizes = [48, 96, 192];
    for(var j = 0; j < sizes.length; j++)
    {
        // エクスポートする画像サイズと同じ名前のサブフォルダを作成
        var size = sizes[j];
        var subFolder = expFolderPath + "/" + size;
        CreateFolder(subFolder);

        // エクスポートするサイズをオプション設定
        opts.horizontalScale = opts.verticalScale = 100 * (size / ORG_SIZE);

        // 各アートボードそれぞれについて処理
        for (var i = 0; i < doc.artboards.length; i++ )
        {
            doc.artboards.setActiveArtboardIndex(i);

            // '[expFolderPath]/[size]/[fName].png' というPNG画像エクスポート
            var fName = doc.artboards[i].name;
            var expFile = File(subFolder  + '/' + fName);
            doc.exportFile ( expFile, ExportType.PNG24, opts );
        }
    }
}

/// --- 以下メイン処理 ---

// 読み込む ai ファイルのパス指定
var fileRef = File("path/to/foo.ai");

// Illustrator で ai ファイルを開く
var docRef = app.open(fileRef);

// エクスポートフォルダパス指定
var expFolderPath = "~/desktop/Icons" + "/" + TrimLast(docRef.name, ".ai");

// エクスポート先フォルダが存在しないときは新規フォルダを作成
CreateFolder(expFolderPath);

// PNG画像をエクスポート
SavePNG(expFolderPath, docRef);

// 保存せずに ai ファイルを閉じる
docRef.close(SaveOptions.DONOTSAVECHANGES);

スクリプトの使い方

Illustrator を開いて [ファイル] > [スクリプト] > [その他のスクリプト] (or Ctrl+F12キー) を選ぶとファイル選択ダイアログが出てきます。上記のスクリプトファイルを選択してください。
選択するとスクリプトが直ちに実行されます。

併せて読みたい?

Illustrator CC で指定フォルダ以下のすべての ai ファイルを開いて何かするスクリプト