nirasan's tech blog

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

Adobe Illustrator でイラストレーターファイルを複数の倍率のPNG画像に一度に書き出すスクリプト

タイトルの通り。
使い方は Adobe Illustrator で JavaScript を使ってバッチを実行する 〜 Illustrator ファイルを PNG に変換するスクリプト - nirasan's tech blog を参照。
出力先フォルダを選択すると、そのフォルダ以下に folders で定義したフォルダ名と倍率でPNG画像が書き出される。

/*******************************
 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, folderName, sourceDoc, targetFile, pdfSaveOpts;

/*
 エクスポートするフォルダ(folder)と倍率(scale)のペアを定義する
 フォルダは存在しない場合自動で作成される
 */
var folders = [
	{ folder:  "small", scale:  25.0 },
	{ folder: "medium", scale:  50.0 },
	{ folder:  "large", scale: 100.0 },
];

// 読み込みフォルダをダイアログで選択
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 (var i = 0; i < files.length; i++ )
		{
			sourceDoc = app.open(files[i]); // returns the document object
									
			for (var j = 0; j < folders.length; j++)
			{
				fileScale = folders[j].scale;
				folderName = folders[j].folder;

				// 保存オプションの取得
				var exportOptions = getExportOptions();

				// PNG返還後のファイル名を取得
				targetFile = getNewName();

				// 変換の実行
				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
	
	var newFolderName = destFolder + '/' + folderName;
	var newFolder = new Folder(newFolderName);
	if (!newFolder.exists)
	{
		newFolder.create();
	}

	saveInFile = new File( newFolderName + '/' + newName );

	return saveInFile;
}

function getExportOptions()
{
	// PNG変換オプションの指定
	var exportOptions = new ExportOptionsPNG24();
	exportOptions.horizontalScale = fileScale;
	exportOptions.verticalScale = fileScale;
	exportOptions.artBoardClipping = true;
	return exportOptions;
}