ごんれのラボ

iOS、Android、Adobe系ソフトの自動化スクリプトのことを書き連ねています。

mini_exiftool導入してみた

RVM入れてからさっきまで気づかなかったんだけど。

AppleScriptからdo shell scriptでRubyをコールして呼び出されるのは/usr/bin/rubyだった。

お恥ずかしい。

ちゃんと検証しながらやらないとダメねぇ。

どこで問題になったかはあとで記載。

さて、本題に入ります。

先日pageという印刷業界の大きいベントがありました。

そのときに@seuzoさん(以下、せうぞーさん)にお会いして「RubyでIllustrator画像収集」へのアドバイスをいただきました。

1.生データを直接加工するなんてやっちゃダメだよ

2.Rubyをバンドルするのはスマートじゃないよ

うん、それについては私もよーく分かっていました。

とりあえず思いつきで進めちゃったので、すでに行き詰まっていました。

ユーザーさんから不具合報告を受けてもなかなか対応もできず。

自らテストと検証をお願いしておきながらこの体たらく。

だってrubyファイルとのバンドルが外れちゃったり、再保存しないとすべてのファイルをCS2として判別しちゃうなんてのは、対処しようがないっていうか。

まぁ書いた自分にスキルが不足してるんでしょうね。

だいぶ落ち込みました。

そんなところにせうぞーさんからのアドバイスです。

具体的な方策も授けていただきました。

まずXMPタグの抽出方法を根本的に書き直す必要があります。

というのは、Illustratorファイルの内部エンコードがさっぱりわからないからです。

UTFなのは間違いないと思うんですが、CS5のファイルを投げると文字化けしちゃうんですよね。

これはもしかしたらMacのOSも関係してくるのかもしれませんが。

そんなの、いちいち検証していられません。

ってことで、EXIFを抽出してくれるツール?のお力をお借りすることに。

その名も「ExifTool」。

こいつの導入にあたっては下記を参照しました。

[ruby][Exif][command][XMP]XMPやEXIFをrubyで読み書きする

exiftoolを使って写真の情報を管理

まずはインストールから。

ExifTool

上記サイトから自分の環境にあったものをダウンロードします。

私の場合はMacです。

ダウンロードしたdmgをダブルクリックしてインストーラーをダブルクリック。

ガイドに従ってクリックしていけばインストールは完了。

簡単ですね。

インストールしたExifToolは下記のように使います。

適当なJPEG画像を指定してあげましょう。

$ exiftool IMG_0002.JPG 

結果。

ExifTool Version Number         : 8.77

File Name : IMG_0002.JPG

Directory : /Users/hoge

File Size : 1036 kB

File Modification Date/Time : 2009:08:17 12:57:53+09:00

File Permissions : rw-r--r--

File Type : JPEG

MIME Type : image/jpeg

Exif Byte Order : Big-endian (Motorola, MM)

Make : Apple

Camera Model Name : iPhone

ずらずらとEXIF情報が吐き出されたと思います。

IDを日本語名で表示したいときはオプションを足してあげます。

$ exiftool -lang ja IMG_0002.JPG 

結果。

ExifToolバージョン                   : 8.77

ファイル名 : IMG_0002.JPG

ファイルの場所 : /Users/hoge

ファイルのサイズ : 1036 kB

更新日時 : 2009:08:17 12:57:53+09:00

File Permissions : rw-r--r--

ファイルタイプ : JPEG

MIMEタイプ : image/jpeg

Exif Byte Order : Big-endian (Motorola, MM)

メーカー : Apple

画像入力機器モデル : iPhone

そして実際にタグを元に情報を抽出してみるわけですが、タグとIDが一致していないので、素直にはいきません。

タグを調べたいときはオプションをつけてあげます。

$ exiftool -s IMG_0002.JPG 

結果。

ExifToolVersion                 : 8.77

FileName : IMG_0002.JPG

Directory : /Users/hoge

FileSize : 1036 kB

FileModifyDate : 2009:08:17 12:57:53+09:00

FilePermissions : rw-r--r--

FileType : JPEG

MIMEType : image/jpeg

ExifByteOrder : Big-endian (Motorola, MM)

Make : Apple

Model : iPhone

さっきと変わったのがお分かりですね。

ここでようやく抽出です。

$ exiftool -s-Make IMG_0002.JPG 

結果。

Make                            : Apple

無事抽出できました。

値だけを抽出したいとき。

$ exiftool -s-s -s -Make IMG_0002.JPG 

結果。

Apple

Appleだけ抽出できました。

うん、すごく便利。

大体使い方を理解したところで、こいつをRubyで使えるようにします。

$ sudo gem install mini_exiftool

これでインストールログが流れてインストールできたはず。

ちなみに私はRVM環境の1.8.7にインストールしました。

その際はsudoが必要ありません。

試しにサンプルを書いてみましょう。

#! ruby -Ku

require 'rubygems'

require 'mini_exiftool'

sample = MiniExiftool.new ARGV[0]

puts sample['Make']

$ ruby sample.rb IMG_0002.JPG 

$ apple

こんな感じで使います。

うーん、便利便利。

タグを無理矢理読み解いて正規表現でどうにかしてた自分が恥ずかしい。

まぁそういう泥臭いことやったからこそ、こういうツールのありがたみが分かるってもんよ。

…そういうことにしてください。

そして冒頭に書いた件。

私はRVM環境のruby 1.8.7のgemsにmini_exiftoolをインストールしたわけです。

で、意気揚々とAppleScriptからdo shell scriptで実行させたら、みたことないエラーが吐き出されて、びっくり。

読んでみたら「requireしたやつ、見つかんないよ?」といった内容でした。

で、ここに至って気づいたのです。

AppleScriptからdo shell scriptでRubyをコールして呼び出されるのは/usr/bin/rubyだった。

あっはっはっはー。

そりゃそうか。

というわけで、ちょっとだけ検証。

●RVM環境のrubyをAppleScriptから実行させるにはどうするか?

いろいろググってたらdo shell script "ruby ~"のときに、フルパスを与えてあげればいいみたい。

RVM環境のrubyのフルパスは

$ rvm info

で流れてくるログの「binaries」の「ruby: "/Users/hoge/.rvm/rubies/ruby-1.8.7-p352/bin/ruby"

E」に書いてある。

ちなみにここで取得できるものは「現在RVMで使用しているRuby」の情報です。

試しにAppleScriptから下記を実行してみる。

do shell script "/Users/hoge/.rvm/rubies/ruby-1.8.7-p352/bin/ruby --version"

するとRVMでいまuseしているrubyのバージョンが取得できるはず。

でもこれだとさっきインストールしたmini_exiftoolにrequireできないというエラーが出たまんま。

つまり最初と状況は変わっていない(^^;

そもそもAppleScriptからRVM環境にアクセスできればいいんだけどな。

デフォルトのパスを書き換えてる的なことなのかしら。

その辺り、ご存知の方がいたら教えてください。

疲れてきたので、/usr/bin/gemにexiftoolをインストールしちゃった(^^;

もうちょっと検証してからやれば良かったなーと今になって反省してる。

そんなこんなで「RubyでIllustrator画像収集」は根本的に書き直しになっています。

生データ読み込み方式はあと一回アップデートして更新終了予定。

以降はmini_exiftoolを使った新スクリプトをアップデートしていきます。

使用するには二手間かかってしまいますが、安定度は高くなるはずです。

ひとまず試作版はできているのですが、もう少し機能を足したいので、後日公開とします。

はー、ブログ書くのって時間かかりますね。

すでに三時間ぐらいかかっているという…。

途中レノくんの妨害でマウスが吹き飛ばされたり、キーボードの上に乗っかられたり、背後から気持ち良さそうな寝息が聞こえたりと、父ちゃんもなかなか大変なんだぜ。

これをアップしたらお風呂を沸かして、沸くまでの間にモンハンしつつ、レノくん撫で撫でするお!