スキャナでアルバム写真をスキャンして、PhotoShopの「角度を補正しての切り抜き」で写真を分割しました。
しかし、分割したファイル数がスキャンした写真毎に異なるために、「バッチ処理」を利用した保存方法が分かりません。
そこで、JavaScriptを利用して「一括保存」するスクリプトを作成しました。
指定したフォルダの画像(*.bmp)全てに対して、PhotoShopに登録されたアクション("アクション 3", "セット 1")を適用して、指定したフォルダにJPGとして保存するスクリプト
アクションは適時作成してください。今回の場合は次の手順で作成します。
ダウンロード先はaction.jsxです。(UTF-8形式で保存)
/** ユーザの変更値(ユーザ毎に変更が必要) **/ IMG_EXTENSION = "*.bmp"; ACTION_NAME = "アクション 3"; SET_NAME = "セット 1"; /** 桁あわせ(0で埋める) @param 桁数 **/ Number.prototype.fillZero = function(n) { var r = this.toString().split(''); while(r.length < n) { r.unshift('0'); } return r.join(''); } /** JPGで保存する @param ファイル名 **/ function saveAsJPG( Name ) { var fileObj = new File( Name ); var jpegOpt = new JPEGSaveOptions(); jpegOpt.embedColorProfile = true; jpegOpt.quality = 12; jpegOpt.formatOptions = FormatOptions.PROGRESSIVE; jpegOpt.scans = 3; jpegOpt.matte = MatteType.NONE; activeDocument.saveAs(fileObj, jpegOpt, true, Extension.LOWERCASE); fileObj = null; jpegOpt = null; } /** 登録済みのアクションを実行する。 @param Actn アクション名 @param ActSet アクションセット名 **/ function doAction( Actn, ActSet ) { var actRef = new ActionReference(); actRef.putName( charIDToTypeID( "Actn" ), Actn ); actRef.putName( charIDToTypeID( "ASet" ), ActSet ); var actDesc = new ActionDescriptor(); actDesc.putReference( charIDToTypeID( "null" ), actRef ); executeAction( charIDToTypeID( "Ply " ), actDesc, DialogModes.NO ); actRef = null; actDesc = null; } /** ファイルを閉じる **/ function doFinsh() { activeDocument.close(SaveOptions.DONOTSAVECHANGES); } /** フォルダを選択 **/ function selectFolder( Comment ) { var folderObj = Folder.selectDialog( Comment ); return folderObj; } /** ファイルを開く **/ function doOpen(fileName) { var fileRef = new File(fileName); open (fileRef); fileRef = null; } /********** PhotoShop向け ***************/ if (BridgeTalk.appName == "photoshop") { main(); } function main() { var inPath = selectFolder("処理したいファイルが存在するフォルダを選択"); var outPath = selectFolder("処理後のファイルを保存するフォルダを選択"); var fileList = inPath.getFiles(IMG_EXTENSION); var i; for (i = 0; i < fileList.length; i ++) { // 元ファイルを保存する doOpen(inPath + "/" + fileList[i].name); saveAsJPG(outPath + "/" + i.fillZero(4) + ".jpg"); while(documents.length) { // 開いたファイルにアクションを適用 doAction(ACTION_NAME, SET_NAME); var num = 1; while(documents.length > 1) { // 分割されたファイルを保存する saveAsJPG(outPath + "/" + i.fillZero(4) + "_" + num++ + ".jpg"); doFinsh(); } doFinsh(); } } }
各関数の説明は今後行っていきますが、そのままコピーすれば使えると思います。