XMPメタデータをExtendscriptから操作するライブラリXMPtool

最終更新日

Comments: 2

XMPメタデータをJavascriptから編集するというのは以前からちょこちょこ説明していますが、数年前に作ったライブラリがございます。すっかり放置なのですが結構便利に使えるものです。
https://github.com/ten-A/Extend_Script_experimentals/blob/master/XMPtool.jsx

もの自体はわたしのgithubに用意しております。見ていただけると分かると思いますがmetaMemo等のXMP操作を行うエクステンションのコアを整理して汎用に転用したものです。
おそらく知っている人はよく知っているし、知らない人は全く知らない代物ですのでここらへんでご紹介しておきましょう。


とりあえずコード自体を転載して説明します。

var XMPtool = {
   ns : "http://ns.chuwa.sytes.net/idcomment/1.0/",
   prefix : "ID_meta:",//custom metada
   f : new Object(),
   read : function(prop){//read exist custom metadata.
   if(xmpLib==undefined) var xmpLib = 
         new ExternalObject('lib:AdobeXMPScript');
      var xmpFile = new XMPFile(this.f.fsName, XMPConst.UNKNOWN, 
      XMPConst.OPEN_FOR_READ);
      var xmpPackets = xmpFile.getXMP();
      var xmp = new XMPMeta(xmpPackets.serialize());
      return xmp.getProperty(this.ns, prop).toString();
   },
   write : function(prop, val){ 
   //argumetns{prop:String/property of custom metadata, val1:String/value} 
     if(xmpLib==undefined) var xmpLib = 
        new ExternalObject('lib:AdobeXMPScript');
      var xmpFile = new XMPFile(this.f.fsName, 
          XMPConst.UNKNOWN, XMPConst.OPEN_FOR_UPDATE);
      var xmp = xmpFile.getXMP();
      var mt = new XMPMeta(xmp.serialize());
      XMPMeta.registerNamespace(this.ns, this.prefix);
      mt.setProperty(this.ns, prop, val);
      if (xmpFile.canPutXMP(xmp)) xmpFile.putXMP(mt);
      xmpFile.closeFile(XMPConst.CLOSE_UPDATE_SAFELY);
      }
   }

書き込みシーケンスから見てみます。OPEN_FOR_UPDATEで対象ファイルをオープンします。メタデータをgetしてシリアライズしたらネームスペースをプレフィックス付で登録します。これでプロパティの登録準備が完了です。あとはプロパティ名を値のペアをこのネームスペースを対象にsetPropertyメソッドを使って割り当てます。最後にCLOSE_UPDATE_SAFELYを引数にして対象ファイルをクローズします。
読み込みの場合OPEN_FOR_READで対象ファイルを開きメタデータをgetしてシリアライズをかけます。ここまではwriteと同じです。readの場合はgetPropertyメソッドをネームスペースとプロパティ名を指定して呼び出せばOK。

使い方です。

XMPtool.f = File.openDialog ();
XMPtool.ns = "ns.example.com/comment/1.0";
XMPtool.prefix = "customPreFix:";
XMPtool.write("customProperty", "てすとの文字列です。");
alert(XMPtool.read("customProperty"));

この様にnsとprefixの値を書き換えてあげてください。
writeの場合はプロパティ名と値のペアを引数に、readの場合はプロパティ名を引数に呼び出してください。

この様にカスタムネームスペースが追加されカスタムプレフィックス以下にカスタムプロパティが追加され値が書き込まれます。この様に書き込んだメタデータはスクリプトを利用する以外に、各アプリケーションのファイル情報を参照する事でも確認が可能となります。

最後に、Javascript Tool Guide CCにリファレンスは記述されていますが、もう少しベーシックな操作方法を解説しないと使える人増えませんよね〜(^ー^)/

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする

2件のフィードバック

  1. inddファイルのXMPメタデータに文字列を記述しすぎて、弊社RIP(EQUIOS)にて原因不明のエラーが出てRIPできないという自体に陥りましたw
    原因は、メタデータに一定文字数以上記述されていると無条件でEQUIOSが渡されたファイルを弾いてしまうためらしいです。カスタマーサービスからは「今後この文字数制限が緩められたり排除されたりする方向には向かうでしょうが、いつごろになるかは分かりません」という旨の回答を得ました。何事もやり過ぎ注意ですね…(^^;;;

コメントを残す