コマンドライン引数に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.
- remvee/exifr · GitHub
- exifr/lib/exifr/tiff.rb at master · remvee/exifr · GitHub
- class Dir
- library optparse
tags: ruby exif
Posted by NI-Lab. (@nilab)