スクリプト作成5 ~ 画像のコピー、新規ウィンドウへの貼り付け
次は「画像のコピー」と、「新規ウィンドウへの貼り付け」です。「画像のコピー」では、選択範囲を作成して画像をコピーします。「新規ウィンドウへの貼り付け」では、新しいウィンドウを作成して、先ほどコピーしたファイルを貼り付けます。どちらも、方法さえ覚えてしまえば簡単な処理です。
//==== コピー ========================================================== // var x1 = 0; // X座標開始位置 var x2 = srcDoc.width; // X座標終了位置 var y1 = 0; // Y座標開始位置 var y2 = srcDoc.height; // Y座標終了位置 srcDoc.selection.select( // 選択範囲を作る Array ( // 配列で選択範囲を指定 Array( x1, y1 ), // 左上 Array( x2, y1 ), // 右上 Array( x2, y2 ), // 右下 Array( x1, y2 ) // 左下 ), SelectionType.REPLACE, // REPLACE(新規選択)以外には、 // 選択範囲に追加(EXTEND)、 // 選択範囲から削除(DIMINISH)、 // 現在の選択範囲との共通範囲(INTERSECT) // がある。 0, // ぼかしピクセル数 false); // アンチエイリアス srcDoc.selection.copy(); // 選択範囲をコピー //==== 貼り付け ======================================================== // var pasteDoc = documents.add( // 新規ドキュメント追加 x2, // 横幅 y2, // 高さ srcDoc.resolution, // 元ドキュメントの解像度 "Paste Target" ); // 新規ドキュメント名 pasteDoc.paste(); // 貼り付け pasteDoc.flatten(); // レイヤー結合
まずは「画像のコピー」について少し解説が必要でしょう。選択範囲は点の配列で指定します。各点は、X座標、Y座標を持った、配列数2の配列になります。Array( x1, y1 )
と指定している部分が、各点の配列です。
選択の種類は、SelectionType
で指定します。新規に選択範囲を作成する場合はSelectionType.REPLACE
、選択範囲に追加したい場合はSelectionType.EXTEND
、選択範囲から削除したい場合はSelectionType.DIMINISH
、現在の選択範囲との共通範囲を作成したい場合はSelectionType.INTERSECT
と指定します。
この選択範囲と、選択の種類をうまく使えば、自在に画像をトリミングすることができます。覚えておくとよいでしょう。
次は、「新規ウィンドウへの貼り付け」です。documents.add()
メソッドで新規のウィンドウを作成することができます。返り値は、新しく作成したウィンドウ自身になります。貼り付けはpaste()
メソッドです。貼り付けられた画像は新規レイヤーとなってしまうので、flatten()
メソッドでレイヤーを結合しています。
スクリプト作成6 ~ 新規サイズの計算、リサイズ
新しく作成した画像を、ユーザー変数で指定した横幅と高さに収まるようにリサイズします。シンプルな処理です。
//==== 新規サイズの計算 ================================================ // // 縦を基準に縮小するか、横を基準に縮小するかを、その縦横比から // 判定して、新規サイズの横幅と高さを計算する。 // // 以下の計算式で、縦が大きいか横が大きいかを判定する。 // 「x2 / y2 >= outMaxW / outMaxH」 // 整数のみで計算するために、分数を掛け算に開く。 // 「x2 / y2 >= outMaxW / outMaxH」→「x2 * outMaxH >= y2 * outMaxW 」 // if ( x2 * outMaxH >= y2 * outMaxW ) { //==== 横が長過ぎる(横を基準にリサイズ) ========================== // newW = outMaxW; // 新規横幅 newH = y2 * outMaxW / x2; // 新規高さ } else { //==== 縦が長過ぎる(縦を基準にリサイズ) ========================== // newW = x2 * outMaxH / y2; // 新規横幅 newH = outMaxH; // 新規高さ } //==== サイズの変更 ==================================================== // pasteDoc.resizeImage( // サイズの変更 newW, // 横幅 newH, // 高さ pasteDoc.resolution, // 解像度 ResampleMethod.BICUBIC ); // 縮小形式
resizeImage()
で画像のサイズを変更します。
pasteDoc.resolution
という部分に関して少し説明をしておきます。これは、サイズ変更後の画像の解像度を、pasteDoc
の元々の解像度であるpasteDoc.resolution
と同じ値にするという意味です。こうしておけば、解像度を固定したまま、横幅と高さだけを変えることができます。
スクリプト作成7 ~ JPEGで保存
作成した画像をJPEGで保存します。その際に、画像のクオリティなどのJPEG固有の設定を、プログラムで指定してから保存します。
//==== JPEGで保存 ====================================================== // var jpgSaveOpt = new JPEGSaveOptions(); // JPEG保存設定 jpgSaveOpt.quality = outQuality; // JPEGクオリティ // その他 jpgSaveOpt.embedColorProfile = false; // 埋め込みカラー設定 jpgSaveOpt.formatOptions = FormatOptions.OPTIMIZEDBASELINE; pasteDoc.saveAs( // 保存 saveFileJPG, // 保存パス jpgSaveOpt, // JPEG保存設定 true, // 複製保存 Extension.LOWERCASE ); // 拡張子は小文字
new JPEGSaveOptions()
としてJPEG保存設定を作成します。そして、各プロパティを書きかえて設定を決めます。outQuality
は、JPEGクオリティを指定するユーザー変数です。プロパティの指定後、「変数の初期化」の項で作成したsaveFileJPG
を保存パスとし、jpgSaveOpt
を保存設定としてファイルを保存します。
Extension.LOWERCASE
として、拡張子を小文字にしています。ここで拡張子を指定するので、保存パスには拡張子を記述する必要がありません。
スクリプト作成8 ~ GIFで保存
次はGIFで保存します。GIFはインデックス・カラー(パレット情報を持った画像)なので、いったん減色してから保存しています。
さらに、新しく作成したウィンドウを閉じ、画像のコピー元のウィンドウも閉じます。
この項で、各ファイルに対する「実際の処理」は終了です。分かりやすいように、「繰り返し処理」の末尾の閉じ括弧も付けておきます。
//==== モードをインデックス・カラーに変更 ========================== // var indxOpt = new IndexedConversionOptions(); // インデックス変換設定 indxOpt.colors = outColNo; // 色数 // 他の設定 indxOpt.forced = ForcedColors.NONE; indxOpt.matte = MatteType.NONE; indxOpt.palette = Palette.LOCALPERCEPTUAL; indxOpt.preserveExactColors = false; indxOpt.transparency = false; pasteDoc.changeMode( // カラー・モード変更 ChangeMode.INDEXEDCOLOR, // インデックス・モード indxOpt ); // インデックス変換設定 //==== GIFで保存 =================================================== // var gifSaveOpt = new GIFSaveOptions(); // GIF保存設定 gifSaveOpt.interlaced = false; // インターレースなし pasteDoc.saveAs( // 保存 saveFileGIF, // 保存パス gifSaveOpt, // GIF保存設定 true, // 複製保存 Extension.LOWERCASE ); // 拡張子は小文字 //---------------------------------------------------------------------- //==== 貼り付けドキュメントを閉じる ================================ // pasteDoc.close( SaveOptions.DONOTSAVECHANGES ); // 変更を保存せずに閉じる pasteDoc = null; //==== 対象ファイルを閉じる ======================================== // srcDoc.close( SaveOptions.DONOTSAVECHANGES ); // 変更を保存せずに閉じる srcDoc = null; }
まずはモードをインデックス・カラーに変更します。new IndexedConversionOptions()
として「インデックス変換設定」を作成し、各プロパティを指定して設定を決めます。outColNo
は、GIFの色数を指定するユーザー変数です。プロパティの指定後、changeMode()
メソッドを使って、画像をインデックス・カラーに変換します。
GIFの保存はJPEGの保存と同じです。違う点は、JPEG保存設定JPEGSaveOptions()
ではなく、GIF保存設定GIFSaveOptions()
を使う点だけです。
最後に、ウィンドウを閉じます。SaveOptions.DONOTSAVECHANGES
と引数を設定することで、ファイルの保存確認を行うウィンドウを出さずにウィンドウを閉じることができます。
以上で、処理は終わりです。