コマンドライン引数にJPEG画像ファイルのパスを指定して、Exifの位置情報が含まれていたらファイル名と緯度・経度を出力する。
オプションに -r か -R か --recursive を指定したときは再帰的にディレクトリの中を探索する。

ソースコード。RubyGems + exifr ライブラリを使用。


#!/usr/bin/env ruby
# coding: utf-8
$KCODE='u'
 
require 'optparse'
require 'rubygems'
require 'exifr'
 
def get_opts(argv)
  opts = {}
  OptionParser.new {|opt|
    opt.on('-r') {|b| opts[:recursive] = b }
    opt.on('-R') {|b| opts[:recursive] = b }
    opt.on('--recursive') {|b| opts[:recursive] = b }
    opt.parse!(argv)
  }
  return opts
end
 
def check_exif_gps(filepath)
  begin
    exif = EXIFR::JPEG::new(filepath)
    if exif.gps then
      print filepath
      print ": "
      print exif.gps.latitude.to_s
      print ", "
      print exif.gps.longitude.to_s
      puts
    else
      # print filepath
      # puts
    end
  rescue
    # print filepath
    # puts
    # $stderr.puts $!.to_s
    # $stderr.puts $!.backtrace.inspect
  end
end
 
opts = get_opts(ARGV)
if opts[:recursive] then
  ARGV.each{|dirpath|
    Dir.glob(dirpath + "/**/*").each{|filepath|
      check_exif_gps(filepath)
    }
  }
else
  ARGV.each{|filepath|
    check_exif_gps(filepath)
  }
end
 
if ARGV.size < 1
  puts "Usage: ruby #{File.basename(__FILE__)} [-r] files/dirs"
end

動作確認環境

  • ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin11.0] (Mac OS X Lion)
  • ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux] (Debian squeeze)
  • exifr 1.1.3

Ref.

tags: ruby exif

Posted by NI-Lab. (@nilab)