スキャナでアルバム写真をスキャンして、PhotoShopの「角度を補正しての切り抜き」で写真を分割しました。
しかし、分割したファイル数がスキャンした写真毎に異なるために、「バッチ処理」を利用した保存方法が分かりません。
そこで、JavaScriptを利用して「一括保存」するスクリプトを作成しました。
指定したフォルダの画像(*.bmp)全てに対して、PhotoShopに登録されたアクション("アクション 3", "セット 1")を適用して、指定したフォルダにJPGとして保存するスクリプト
アクションは適時作成してください。今回の場合は次の手順で作成します。
ダウンロード先はaction.jsxです。(UTF-8形式で保存)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | /** ユーザの変更値(ユーザ毎に変更が必要) **/ 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(); } } } |
各関数の説明は今後行っていきますが、そのままコピーすれば使えると思います。