これってどのくらい知られていることなんでしょうか。ググってもあまり出てこない話なのでまとめを書いてみるテスト。
画像をあつかうグラフィックソフトとして、Adobeのイラストレーター(Illustrator)やフォトショップ(PhotoShop)が有名です。アドビのソフトの多くはスクリプティングに対応していて、ちょこっとプログラミングをかじったことのある人なら比較的簡単にイラストレーターやフォトショップを自動操縦することができます。
先日、縦横サイズがバラバラの画像(数100点)をすべて同じ大きさにリサイズする作業をやることになりました。手作業で「ファイル開く」「リサイズする」「別名保存する」をひたすら心を無にして手を動かしてもいいんですが、途中で気が狂ってしまいそうな予感がしたので、このリサイズ処理を自動で行うスクリプトを書いて処理させてみました。このときの話をベースにして書きます。
■Adobeソフトのスクリプティング基礎
◆OSプラットホームとスクリプト言語
AdobeソフトはWindows向けとMacintosh向けに提供されていますが、それぞれ利用できるスクリプティング言語が指定されています。
- VBScript (Windowsのみ)
- JavaScript (Windows、Macintosh両方)
- AppleScript (Macintoshのみ)
それぞれ言語ごとに、for文の書き方とかプロパティへのアクセスの仕方とかコメントアウトの仕方とかは異なります。が、共通のアプリケーションオブジェクトモデルが採用されています。ですので、例えばdocumentオブジェクトには複数のpageitemがあって、それぞれのpageitemには座標情報や線の色といったプロパティ群が用意されている、といったアプリケーション内のオブジェクト構造へ、どのスクリプティング言語からでも同じようにアクセス・操作することができます。
◆スクリプトの作成と起動方法
今回は、Illustrator向けのスクリプトを、JavaScriptで作成します。
作成するには、手元のテキストエディタで編集して、拡張子.jsで保存すればOKです。ほかになにも特別なものは要りません。
作成したスクリプトの実行するには、2通りの方法があります。
- イラストレーター内メニューの、ファイル>スクリプト>その他のスクリプト
で、ファイル選択ダイアログが表示されるので、このjsファイルを指定する。 - Illustratorがインストールされているフォルダ内の「プリセット」>「スクリプト」フォルダの中に配置する。
するとイラストレーターのスクリプトメニューに、このスクリプトが表示されるようになります。
(要イラストレーター再起動)
このへんの基礎的なことや、クラス構造の詳細については、インストールCDのなかにスクリプティングガイド資料pdfが入っていますので、そちらを見てください。あるいはサンプルスクリプトも各種用意されていますので、あたらしく何か作るときにとても参考になります。
■今回つくったスクリプト
実行するとフォルダを聞いてきます。 画像が入ったフォルダを指定すると、そのフォルダ内にあるファイルを1つずつ、新規ドキュメントをつくって中に貼り付けて、縦横比率を守ったままサイズを72ピクセル四方へリサイズして、gif形式で別名保存します。
というものです。
ソースはこんなかんじ。
var sourceFolder, files, fileType;
var gBaseSize = 72; //リサイズ後のキャンパスの縦横サイズ// 読み込みフォルダを選択
sourceFolder = Folder.selectDialog( 'フォルダを選択してください: ', '~' );if ( sourceFolder != null ) {
// フォルダ内のファイルフィルタ指定
fileType = '*.*';
files = new Array();
files = sourceFolder.getFiles( fileType );
if ( files.length > 0 ) {
// gif書き出し設定
var exportType = ExportType.GIF;
var exportOptions = new ExportOptionsGIF();
exportOptions.antiAliasing = true; // アンチエイリアス=On
exportOptions.colorCount = 256; // 256色モード
exportOptions.interlaced = true; // インタレース=On
exportOptions.transparency = true; // 透明色使用
exportOptions.artBoardClipping = true; // アートボードサイズで保存
for (var i = 0; i < files.length; i++ ) { // フォルダ内のファイルごとにループ
// ドキュメント新規作成
var newDoc = app.documents.add(null, gBaseSize, gBaseSize);
// 画像読み込み
var obj = newDoc.groupItems.createFromFile(files[i]);
// 移動&リサイズ(縦横比を維持したまま、中央そろえにする)
var oldWidth = obj.width;
var oldHeight = obj.height;
if(oldWidth > oldHeight) { //横長の場合
obj.width = gBaseSize;
obj.height = (gBaseSize * (1.0 * oldHeight / oldWidth));
obj.left = 0;
obj.top = (gBaseSize - ((gBaseSize - obj.height) / 2));
}
else { //縦長の場合
obj.height = gBaseSize;
obj.width = (gBaseSize * (1.0 * oldWidth / oldHeight));
obj.top = gBaseSize;
obj.left = ((gBaseSize - obj.width) / 2);
}
// 出力ファイルパス&命名(元のフォルダと同じ場所に別名保存)
var exportPath = new File(files[i].path + "/resized_" + files[i].name);
// GIF書き出し
newDoc.exportFile(exportPath, exportType, exportOptions);
// ファイル閉じる
newDoc.close(SaveOptions.DONOTSAVECHANGES);
}
}
alert('finish');
}
■こまかい注意点など
日本語をあつかうときは微妙に注意が必要な場合があります。
- このスクリプトはUTF-8で保存しましょう。他のエンコーディングだとコメント中の日本語箇所でエラーになったりします。
- 扱うファイルのフルパスのなかに日本語が含まれていると、不具合が起きることがあります。
- そのほか、今回は扱っていませんが、色とかフォントとか座標単位系とかの操作は若干クセがあったりします。慣れましょう。
気が向いたら続く、、かも。







