nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

Adobe Illustrator で JavaScript を使ってバッチを実行する 〜 Illustrator ファイルを PNG に変換するスクリプト

はじめに

  • Illustrator でアクションのバッチをやってみようと思いググってみましたがいまいちよくわかりませんでした。
  • 調べているうちに JavaScript が使えることがわかり、こっちの方が親しみやすかったので、IllustratorJavaScript をつかってバッチを実行する方法をまとめてみます。

概要

Illustrator では複数のスクリプト環境がサポートされています(Microsoft Visual BasicAppleScriptJavaScriptExtendScript など)。 Illustrator に付属する標準スクリプトを使用することも、独自のスクリプトを作成してスクリプトサブメニューに追加することもできます。

サンプルスクリプト

Illustrator ファイルを PNG に変換するスクリプト

つくりかた

  • サンプルスクリプトを参考に、Illustrator ファイルを PNG に変換するスクリプトを実装してみました。
  • もとにしたのは、プリセット以下にある「ドキュメントをSVGとして保存.jsx」で、SVG関連箇所をPNGに書き換えました。
  • PNGの保存オプションは、前述のJavaScriptのリファレンスを "PNG" で検索して参照しました。

つかいかた

  • 下記のスクリプトをコピーして任意の場所に保存してください。
  • Illustrator のメニューから [ファイル]→[スクリプト]→[その他のスクリプト] で、保存したスクリプトを選択してください。
  • ダイアログが出るので、それに従って、Illustrator ファイルのあるフォルダ、ファイル名、出力時のサイズの倍率(縦横等比)、出力先フォルダ、を入力してください。

スクリプト

/*******************************
 IllustratorファイルをPNGに変換する

 参考サンプルファイル:/Applications/Adobe Illustrator CS6/Scripting.localized/Sample Scripts.localized/JavaScript.localized/Save as PDFs.jsx
 リファレンス:http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/illustrator/scripting/cs6/Illustrator-Scripting-Reference-JavaScript.pdf
 *******************************/

var destFolder, sourceFolder, files, fileType, fileScale, sourceDoc, targetFile, pdfSaveOpts;

// 読み込みフォルダをダイアログで選択
sourceFolder = Folder.selectDialog( 'PNGに変換したいIllustratorファイルのあるフォルダを選択してください。', '~' );

if ( sourceFolder != null )
{
	files = new Array();
	fileType = prompt( '対象のファイル名を入力してください。 例: *.ai', ' ' );
	fileScale = prompt( '出力時のスケールをパーセンテージで入力してください。 例: 200.0', ' ' );
	
	// マッチするファイルリストの取得
	files = sourceFolder.getFiles( fileType );
	
	if ( files.length > 0 )
	{
		// 出力先フォルダをダイアログで選択
		destFolder = Folder.selectDialog( '出力先のフォルダを選択してください。', '~' );
		for ( i = 0; i < files.length; i++ )
		{
			sourceDoc = app.open(files[i]); // returns the document object
									
			// PNG返還後のファイル名を取得
			targetFile = getNewName();
			
			// PNG変換オプションの指定
			var exportOptions = new ExportOptionsPNG24();
			exportOptions.horizontalScale = fileScale;
			exportOptions.verticalScale = fileScale;
			exportOptions.artBoardClipping = true;

			// 変換の実行
			app.activeDocument.exportFile( targetFile, ExportType.PNG24, exportOptions );
			
			sourceDoc.close(SaveOptions.DONOTSAVECHANGES);
		}
		alert( 'PNGファイルの出力が成功しました。 出力先:' + destFolder );
	}
	else
	{
		alert( 'ファイルが存在しません。' );
	}
}

function getNewName()
{
	var ext, docName, newName, saveInFile, docName;
	docName = sourceDoc.name;
	ext = '.png'; // new extension for png file
	newName = "";
		
	for ( var i = 0 ; docName[i] != "." ; i++ )
	{
		newName += docName[i];
	}
	newName += ext; // full pdf name of the file
	
	saveInFile = new File( destFolder + '/' + newName );

	return saveInFile;
}