Paradigm Shift Design

ISHITOYA Kentaro's blog.

ruby-exif.rbをあきらめてExifrを使ってみる

の続き。


ruby-exif.rbをデバッグするのも馬鹿らしいので、Young risk taker.: [Ruby] EXIFのGPS情報も取得できるExtExif 1.0をリリースしたを見つけて、

gems install extexif

として、インストールを試みる。でもなんか怒られる。
仕方ないのでエラーメッセージを見るに、まずnmakeがみつからないって。

c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat

を実行するといいらしい。
再度トライ。・・・が、今度はlibexifのヘッダファイルがないらしい。404 Not Foundから、libexifのdllとheaderをダウンロードしてきて、ruby_home以下に設置。
再度トライ。・・・が、今度はexif.libが見つからないらしい。libexifをVSでコンパイルするだとか、あほ過ぎるのでextexifは断念。ちなみにcygwinのrubyで

gems install extexif

したら、おとなしく入ったけれど、動くかな〜動いたらいいな〜とか思いつつ、コンパイルされたものをWindowsのruby_homeに移動するも、exif.soは読めませんとか。


Linuxなら素直に入るのでしょう。Fxxkとつぶやきつつ、再びGoogleさんにお問い合わせ。
RubyForge: EXIF Reader: Project InfoというのがあるらしいことをEXIF Library - Ruby Forumで見つける。
Newsを見るに、すでにRuby1.9にも対応済み、GPSデータも読める。
でもextexifの二の舞かなとかおもいつつ、おもむろに

gems install exifr

とタイプ。
ん!インストール完了!


しかし・・・

@tags = EXIFR::JPEG.new(@filenam)
p @tags

とすると、

TypeError in ContentsController#create 
can't dup NilClass

とか・・・デバッグすんのカヨ!!


と思いつつ。当該箇所を読むに・・・

    # +file+ is a filename or an IO object.
    def initialize(file)
      if file.kind_of? String
        File.open(file, 'rb') { |io| examine(io) }
      else
        examine(file.dup)
      end
    end

ん?あれ?ファイル名渡してるのに。
・・・

@tags = EXIFR::JPEG.new(@filename)
p @tags

ですね。@filenamだって。TYPOTYPO
昨日の後遺症でライブラリを疑ってしまった。

#<EXIFR::JPEG:0x488c9e0 @bits=8, @exif=[{:gps_latitude=>[Rational(35, 1), Rational(93, 10), Rational(0, 1)], :date_time_digitized=>Wed Jul 23 15:13:48 +0900 2008, :model=>"iPhone", :gps_longitude_ref=>"W", :make=>"Apple", :gps_longitude=>[Rational(136, 1), Rational(2901, 50), Rational(0, 1)], :date_time=>Wed Jul 23 15:13:48 +0900 2008, :color_space=>65535, :orientation=>#<EXIFR::TIFF::Orientation:0x37b6238 @value=1, @type=:TopLeft>, :pixel_x_dimension=>1600, :x_resolution=>Rational(72, 1), :f_number=>Rational(14, 5), :gps_latitude_ref=>"N", :pixel_y_dimension=>1200, :date_time_original=>Wed Jul 23 15:13:48 +0900 2008, :y_resolution=>Rational(72, 1), :resolution_unit=>2}, {:jpeg_interchange_format=>525, :jpeg_interchange_format_length=>5645, :orientation=>#<EXIFR::TIFF::Orientation:0x37b6238 @value=1, @type=:TopLeft>, :x_resolution=>Rational(72, 1), :compression=>6, :y_resolution=>Rational(72, 1), :resolution_unit=>2}], @width=1600, @height=1200>

という結果が!
あー。なんか無駄に疲れたぜ。


WindowsのRubyEXIFを扱いたい場合は、exifr(Exif Reader)をお勧めします。


・・・運用環境は100%Linuxだから情報があんまりないんだな〜。
RubyPHPみたいに、言語の開発元がバイナリをすべてパッケージしてくれたらいいのに。