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だって。TYPO。TYPO。
昨日の後遺症でライブラリを疑ってしまった。
#<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のRubyでEXIFを扱いたい場合は、exifr(Exif Reader)をお勧めします。
・・・運用環境は100%Linuxだから情報があんまりないんだな〜。
RubyもPHPみたいに、言語の開発元がバイナリをすべてパッケージしてくれたらいいのに。