お仕事メモ帳
こんにちは。開発系( InDesign、Illustrator、AppleScript、JavaScript、Ruby)、セミナーのレポートなどについて書いています。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。


[ruby]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を使った新スクリプトをアップデートしていきます。
使用するには二手間かかってしまいますが、安定度は高くなるはずです。
ひとまず試作版はできているのですが、もう少し機能を足したいので、後日公開とします。

はー、ブログ書くのって時間かかりますね。
すでに三時間ぐらいかかっているという…。
途中レノくんの妨害でマウスが吹き飛ばされたり、キーボードの上に乗っかられたり、背後から気持ち良さそうな寝息が聞こえたりと、父ちゃんもなかなか大変なんだぜ。
これをアップしたらお風呂を沸かして、沸くまでの間にモンハンしつつ、レノくん撫で撫でするお!


Ruby トラックバック0 コメント0 page top





管理者にだけ表示を許可する





トラックバック
TB*URL





Copyright © お仕事メモ帳. all rights reserved.
FC2ブログ