2018-09-07

Photoshopのスクリプトで画像に説明メタデータをつける

Indesignでメタデータを使って画像にキャプションをつける機能を使うとキャプションを配置する作業がとても
楽にできますが、画像ファイルにキャプションにするためのメタデータがついていないといけません。ファイル名をキャプションにするのが一番手っとりばやいですが、ファイルの拡張子までキャプションになってしまうし、長いキャプションはできません。Adobe Bridgeでファイルのメタデータを編集することができますが、ちょっとめんどくさいです。大量の画像にキャプションをつける仕事があり、少しでも楽をできないかと、テキストファイルから画像に「説明」のメタデータをつけるphotoshopのスクリプトを作ってみました。試している途中でなにかに失敗して、photoshopが落ち、AdobeなんとかエラーでAdobeCCのアプリ一式が起動しなくなり、仕方なくMacを再起動したらMacOSごと起動しなくなり、OS上書き再インストールでも起動できず、ハードディスクを初期化してOSクリーンインストール・環境再構築をする羽目になったので結局楽はできませんでしたが、とりあえず初期の目的を果たすスクリプトができました。初心者のためエラー処理もなく汚いスクリプトですが。。

まず、キャプションと画像ファイル名の対応をテキストファイルで用意します。
——
画像ファイル名1.psd
図1 キャプションキャプションキャプション
途中で改行しても良い
キャプションが終わったら1行アキ

画像ファイル名2.psd
図2 キャプションキャプションキャプション
途中で改行しても良い
テキストの最後は2行アキ


——
こんな感じでファイル名の後に続けてキャプション、1行あけて次の画像ファイル名、キャプション…というテキストファイルを作って、保存しておきます。

photoshopのスクリプトはこんな感じです。ファイルを開くところなどは参考書などからそのまま使わせてもらっています。

最初にテキストファイルを選択するダイアログが出て、次に画像が入っているフォルダを選択するダイアログが出ます。
テキストファイルから、拡張子.psdの画像ファイル名を読みとって、フォルダ内の同名の画像ファイルを探して、その画像に「説明」メタデータを設定します。

//テキストファイルを選択
var txtFileObj = File.openDialog("textファイル選択");

//いれものを用意
var list = [];
var item = [];
var tmp = "";

/*
テキストファイルからファイル名とキャプションのペアを作る
[[“ファイル名1”, “キャプションキャプションキャプション ”],
[“ファイル名2”, “キャプションキャプションキャプション ”],
[“ファイル名3”, “キャプションキャプションキャプション ”]]
*/

//テキストファイルを開く
if (txtFileObj) {
    var flag = txtFileObj.open("r");
    if (flag == true) {
       //テキストファイルの終わりまで繰り返す
        while (!txtFileObj.eof) {
         //1行読み取る
           var line = txtFileObj.readln();
         //もし読み取った行が.psdで終わっていたら
            if (line.match(/\.psd$/)) {
         //itemに行の内容を入れる
                item.push(line);
         //もし読み取った行が空行だったら
                } else if (line == "") {
               //tmpの行末の改行を消す
                   tmp = tmp.replace(/\n$/g,"”);
               //itemにtmpの内容を入れる
                    item.push(tmp);
               //listにitemの内容を入れる
                   list.push(item);
               //tmpとitemの内容を空にする
                    tmp = "";
                    item = [];
         //.psdで終わらず空行でもない場合
                   } else {
                  //tmpに読み取った行を入れる
                        tmp += line;
                  //tmpの最後に改行を入れる
                        tmp += "\n";
                        }
            }
        }
    }

//画像のあるフォルダーを選択
var folderObj = Folder.selectDialog("フォルダーを選択してください。");

//リストの要素数の分繰り返し
for (var i=0; i<list.length; i++) {
       //リストからファイル名とキャプションのペアを一つづつ取り出す
       var cappairs = list[i];
       //フォルダからファイル名で検索して該当ファイルを開く
       var fileObj = new File(folderObj.fullName.toString()+ "/" + cappairs[0]);
       var my_doc = app.open(fileObj);
       //メタデータを設定
       my_doc.info.caption = cappairs[1];
       //ファイルを保存して閉じる
       my_doc.save();
       my_doc.close();
    }