SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Photoshopのスクリプト制御

JavaScriptを利用したバッチ処理によるサムネイル画像の自動生成

  • X ポスト
  • このエントリーをはてなブックマークに追加

スクリプト作成1 ~ ファイルの作成と実行方法

 それでは実際にスクリプトを作成していきましょう。

 「Adobe\Photoshop 7.0\プリセット\Scripts」に「ResizeOut.js」という空のテキスト・ファイルを作成します(フォルダはPhotoshop 7.0の場合です。お使いのPhotoshopのバージョンによって適宜読みかえてください)。このファイルに、プログラムを書いていきます。

 書き終わったプログラムの実行方法は次のとおりです。

  1. メニューの[ファイル]-[自動処理]-[Scripts...]という項目を選択。
  2. スクリプト実行ダイアログを表示される。
  3. 左側のメニューから[ResizeOut]を選択する。
  4. [Run Script]ボタンを押す。
スクリプト実行ダイアログ
スクリプト実行ダイアログ

 まだ何も記述していない場合は、スクリプトを実行しても処理は行われません。それでは以下、プログラムを書いていきましょう。

スクリプト作成2 ~ スクリプト解説部、ユーザー変数

 「ResizeOut.js」の最初の数行は、「スクリプト解説部」と「ユーザー変数」です。「スクリプト解説部」では、本スクリプトの仕様や用途を解説しています。「ユーザー変数」は、実際の使用に際して、ユーザーが用途に合わせてパラメータを書きかえる部分です。

 後で見直した際に、すぐに概要が把握できるように、丁寧に書いておくとよいでしょう。

スクリプト解説部、ユーザー変数
//----------------------------------------
//
//    サイズを調整して保存
//
//----------------------------------------
//    引数 :なし
//    返り値:なし
//    仕様 :画像には、縦長や横長のものがある。それらの画像を、指定す
//        るドット・サイズの長方形に入るようにリサイズする。
//        縦横比は保持する。
//        サイズの指定次第で、拡大も縮小も可能。
//
//         outMaxW
//        ┌───┐
//        │   │
//        │   │outMaxH
//        │   │
//        └───┘
//        この枠にぴったり入るように、画像をリサイズする。
//
//        さらに指定クオリティのJPEGと、指定色数のGIFにして別名保存
//        する。
//
//        保存するファイル名は次のようになる。
//        保存先のフォルダは元のファイルと同じパスになる。
//        「元ファイル名_指定横サイズ_指定縦サイズ_クオリティ.jpg」
//        「元ファイル名_指定横サイズ_指定縦サイズ_色数.gif」
//
//        本処理は、開いているファイルすべてに対して実行される。
//
//    用途:画像をWeb上などで公開する際に、自由な大きさのサムネール
//          を作りたいときに使用する。
//

//==== ユーザー変数の初期化 ============================================
//
var outMaxW = 240;    // 出力時の最大横幅
var outMaxH = 200;    // 出力時の最大高さ
var outQuality = 8;   // JPEG出力時のクオリティ(0~12)
var outColNo = 16;    // GIF出力時の色数(2~256)

スクリプト作成3 ~ 変数の初期化、繰り返し処理

 次は「変数の初期化」と「繰り返し処理」です。「変数の初期化」は、文字通りの意味です。「繰り返し処理」には、少し解説が必要でしょう。

 Photoshopで開いているファイル1つずつに、手動でスクリプトを実行するのは面倒です。開いているファイルすべてに対し、自動で処理を実行したくなると思います。繰り返し処理は、そのためのループ処理です。1ファイルごとに処理を行いたい場合は、この部分をコメントアウトしてください。

変数の初期化、繰り返し処理
//==== 変数の初期化 ====================================================
//
var docNoSum = documents.length; // 開いているファイルの合計数
var docNo;                       // カウンタ用変数
var strtRulerUnits = preferences.rulerUnits; // スクリプト実行前の単位系

//==== 単位系の変更 ====================================================
//
preferences.rulerUnits = Units.PIXELS; // 単位系をピクセルに

//----------------------------------------------------------------------

//==== 開いているファイル全部に対して実行 ==============================
//
for ( docNo = 0; docNo < docNoSum; docNo ++ ) {
    //
    // (★ここに実際の処理が入ります★)
    //
}

//----------------------------------------------------------------------

//==== 単位系を戻す ====================================================
//
preferences.rulerUnits = strtRulerUnits;

 特に説明は必要ないと思いますが、一点だけ解説しておいた方が良い場所があります。documents.lengthです。このプロパティに、現在開いているファイルの数が格納されています。この値をあらかじめ変数に入れておき、この回数分処理を実行すれば、現在開いている全ファイルに対して処理を実行できます。

 以降は、スクリプト中「★ここに実際の処理が入ります★」と書かれている、スクリプトの実処理部分について解説をしていきます。いよいよ、Photoshopのスクリプトの具体的な記述に入ります。

スクリプト作成4 ~ 変数の初期化

 再び「変数の初期化」が出てきて戸惑う人がいるかもしれません。これは、「各ファイルへの処理のための変数初期化」部分です。先に出てきたのは「スクリプト全体のための変数の初期化」なので、違うものです。

 以下、スクリプトを示します。分かりやすいように、先ほど書いた「繰り返し処理」の部分も一部掲載しておきます。

変数の初期化
//==== 開いているファイル全部に対して実行 ==============================
//
for ( docNo = 0; docNo < docNoSum; docNo ++ ) {
    //==== 変数の初期化 ================================================
    //
    var srcDoc = activeDocument;     // 現在アクティブなドキュメント
    var myPath = srcDoc.path + "/";  // フォルダのパスの取得
    var myName = srcDoc.name.split( "." )[0]; // ファイル名の取得

    var saveNameJPG = myName         // 保存ファイル名JPG
        + "_" + outMaxW
        + "_" + outMaxH
        + "_" + outQuality;
    var saveFileJPG = new File( myPath + saveNameJPG ); // 保存パスJPG

    var saveNameGIF = myName         // 保存ファイル名GIF
        + "_" + outMaxW
        + "_" + outMaxH
        + "_" + outColNo;
    var saveFileGIF = new File( myPath + saveNameGIF ); // 保存パスGIF

    var newW = 0;  // 新規横幅
    var newH = 0;  // 新規高さ

 ここでまず解説が必要なのは、activeDocumentでしょう。Application.activeDocumentを省略した記述です。activeDocumentは、現在アクティブな(最前面にある)ファイルを指し、その実体はDocumentオブジェクトです。

 このファイルが保存されているフォルダのパスは、pathプロパティに格納されており、ファイル名がnameプロパティに格納されています。それぞれsrcDoc.pathsrcDoc.nameで取得しています。srcDoc.name.split( "." )[0]としているのは、ファイル名のドット以前の部分を取得するためです。また、フォルダの区切り文字は「/」になります。

 元のファイルと違う名前で保存するために、saveNameJPGsaveNameGIFを作成しています。拡張子を書く必要はありません。保存時に自動的に拡張子は付きます。ファイル名を違うものにしたい場合は、この部分を書きかえてください。

次のページ
スクリプト作成5 ~ 画像のコピー、新規ウィンドウへの貼り付け

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/406 2006/06/12 00:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング