Table of Contents

概要

  • Photoshop/Illustrator で画像に連番を付けて保存する。
  • ドキュメント中のテキストレイヤ(Photoshop)またはテキストフレーム(Illustrator)に連番を入れてEPS形式で保存します。
  • 連番が入れられるのは「ID」という名前を持つテキストレイヤまたはテキストフレームです。
  • Photoshop CS3/CS4 では途中で中断できますが、Illustrator CS3/CS4 では中断ボタンは利かず最後まで処理が止まりません。
  • Photoshop CS3/CS4, Illustrator CS3/CS4 で動作確認。(2010/03/09)

ソース

  • createSerialImg.zip
     // ドキュメント中のオブジェクト名"ID"に連番を入れてEPS形式で保存
     // by TakeAsh
     // 2010/03/09
     #target 'Photoshop'
     #includepath "~/Local Settings/Application Data/Adobe/JavaScript/"
     #include "ominoDialogMaker.jsx" // http://omino.com/sw/ominoAdobeScriptsSuite/shared/ominoDialogMaker.jsx
     #include "packZero.js"
     
     var prefix	= 'Pref';
     var start	= 1;
     var goal	= 10;
     var destFolder =  '~';
     var closeAtFinish = true;
     var keta	= 5;
     
     var appPhotoshop   = 'Adobe Photoshop';
     var appIllustrator = 'Adobe Illustrator';
     
     if ( app.name != appPhotoshop && app.name != appIllustrator ){
     	exit();	// エラーになる
     }
     
     switch( app.name ){
     	case appPhotoshop:
     		// ダイアログさない、アラートは出す。
     		app.displayDialog = DialogModes.ERROR;
     		break;
     	case appIllustrator:
     		// ダイアログ出さない
     		app.userInteractionLevel = UserInteractionLevel.DONTDISPLAYALERTS;
     		break;
     }
     
     var omd = newOminoDialog("連番保存");
     omd.boxedText( 2, 'ドキュメント中のオブジェクト名"ID"に連番を入れてEPS形式で保存します。\n' 
     	+ 'Photoshop CS3/CS4は中断できますが、Illustrator CS3/CS4は中断が利きません。' );
     omd.string( '接頭辞', 'prefix', prefix );
     omd.number( '開始値', 'start', start );
     omd.number( '終了値', 'goal', goal );
     omd.selectFolder( '保存先フォルダ', 'destFolder', destFolder, 'EPS ファイルの保存先フォルダを選択してください。' );
     omd.checkbox( '', 'closeAtFinish', closeAtFinish, '終了時にドキュメントを破棄' );
     var result = omd.run();
     
     if ( result != null ){
     	prefix			= result[ 'prefix'			];
     	start			= result[ 'start'			];
     	goal			= result[ 'goal'			];
     	destFolder		= result[ 'destFolder'		];
     	closeAtFinish	= result[ 'closeAtFinish'	];
     
     	try {
     		var obj_ID = null;
     
     		switch( app.name ){
     			case appPhotoshop:
     				var objs = activeDocument.artLayers;
     				for( var i=0; i<objs.length; ++i ){
     					if ( objs[i].kind == LayerKind.TEXT && objs[i].name == 'ID' ){
     						obj_ID = objs[i].textItem;
     						break;
     					}
     				}
     				break;
     			case appIllustrator:
     				var objs = activeDocument.textFrames;
     				for( i=0; i<objs.length; i++ ){
     					if ( objs[i].name == 'ID' ){
     						obj_ID = objs[i];
     						break;
     					}
     				}
     				break;
     		}
     
     		if ( obj_ID != null ){
     			var win = new Window( 'palette', '連番保存', [100, 100, 210, 170] );
     			var postfix = '/' + packZero( goal, keta )
     			win.msg		= win.add( 'statictext', [8, 8, 100, 30], packZero( start, keta ) + postfix );
     			win.abort	= win.add( 'button', [8,30, 100, 56], '中断' );
     			win.abort.onClick = function(){ this.parent.aborted = true; };
     			win.aborted	= false;
     			win.show();
     
     			var options = this.getOptions();
     
     			switch( app.name ){
     				case appPhotoshop:
     					for(var i=start; i<=goal; ++i){
     						if ( win.aborted ){
     							break;
     						}
     						var IDStr = packZero( i, keta );
     						win.msg.text = IDStr + postfix;
     						obj_ID.contents = IDStr;
     						var targetFile = this.getTargetFile( prefix+IDStr, '.eps', destFolder);
     						activeDocument.saveAs( targetFile, options, true, Extension.LOWERCASE );
     					}
     					break;
     				case appIllustrator:
     					for( var i=start; i<=goal; ++i ){
     						if ( win.aborted ){
     							break;
     						}
     						var IDStr = packZero( i, keta );
     						win.msg.text = IDStr + postfix;
     						obj_ID.contents = IDStr;
     						var targetFile = this.getTargetFile( prefix+IDStr, '.eps', destFolder);
     						activeDocument.saveAs( targetFile, options );
     					}
     					break;
     			}
     			if ( win.aborted ){
     				alert( '中断されました。' );
     			} else {
     				if ( closeAtFinish ){
     					app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
     				}
     			}
     		} else {
     			alert('名前が"ID"のオブジェクトがありません。');
     		}
     	}
     	catch(e) {
     		alert( e.message, 'スクリプト警告', true);
     	}
     }
     
     switch( app.name ){
     	case appPhotoshop:
     		// ダイアログもアラートも出す
     		app.displayDialog = DialogModes.ALL;
     		break;
     	case appIllustrator:
     		// ダイアログ出す
     		app.userInteractionLevel = UserInteractionLevel.DISPLAYALERTS;
     		break;
     }
     
     function getOptions()
     {
     	// Create the required options object
     	var options = new EPSSaveOptions();
     	switch( app.name ){
     		case appPhotoshop:
     			options.embedColorProfile			= true;
     			options.encoding					= SaveEncoding.JPEGHIGH;
     			options.halftoneScreen				= false;
     			options.interpolation				= false;
     			options.preview						= Preview.MACOSJPEG;
     			options.psColorManagement			= false;
     			options.transferFunction			= false;
     			options.transparentWhites			= false;
     			options.vectorData					= true;
     			break;
     		case appIllustrator:
     			options.compatibility				= Compatibility.ILLUSTRATOR13;
     			options.cmykPostScript				= true;
     			options.embedAllFonts				= true;
     			options.embedLinkedFiles			= true;
     			options.includeDocumentThumbnails	= false;
     			options.overprint					= PDFOverprint.PRESERVEPDFOVERPRINT;
     			//options.preview					= false;
     			break;
     	}
     
     	return options;
     }
     
     /**
     	Returns the file to save or export the document into.
     	@param docName the name of the document
     	@param ext the extension the file extension to be applied
     	@param destFolder the output folder
     	@return File object
     */
     function getTargetFile(docName, ext, destFolder) {
     	var newName = '';
     
     	// if name has no dot (and hence no extension),
     	// just append the extension
     	if (docName.indexOf('.') < 0) {
     		newName = docName + ext;
     	} else {
     		var dot = docName.lastIndexOf('.');
     		newName += docName.substring(0, dot);
     		newName += ext;
     	}
     	
     	// Create the file object to save to
     	var myFile = new File( destFolder + '/' + newName );
     	
     	// Preflight access rights
     	if (myFile.open('w')) {
     		myFile.close();
     	} else {
     		throw new Error('アクセスは拒否されました。');
     	}
     	return myFile;
     }
     
     // EOF

リンク