« iPhotoの弱点をRubyで補う[1] | トップページ | iPhotoの弱点をRubyで補う[3] »

2008/04/07

iPhotoの弱点をRubyで補う[2]

前回の記事でEXIFから日付のデータを取得する方法がわかりました。

でも、取得した日付はちょっと変則的な文字列の情報なので、これを処理に使えるTimeオブジェクトに変換してみます。
取得する日付は

YYYY:MM:DD hh:mm:ss\000

という形式なので、日付のデータは以下の方法で取得します。

exif.info["DateTime"].slice(/[0-9]+:[0-9]+:[0-9]+/).gsub(/:/,"-")

次に、時刻のデータは以下の方法で取得します。

exif.info["DateTime"].slice(/ [0-9][0-9]:[0-9]+:[0-9]+/)

これを組み合わせると、

***** sample3.rb *****
require 'ruby-exif'
 
filename = ARGV.shift
 
exif = Exif.new(filename)
dt = exif.info["DateTime"]
p dt.slice(/[0-9]+:[0-9]+:[0-9]+/).gsub(/:/,"-") +
    dt.slice(/ [0-9][0-9]:[0-9]+:[0-9]+/)

試しに実行してみると

$ ruby sample3.rb RIMG0011.JPG 
"2007-05-29 03:24:04"

これをTimeオブジェクトに変換するにはParsedateクラスを使用します。

***** sample4.rb *****
require 'parsedate'
require 'ruby-exif'
 
filename = ARGV.shift
 
exif = Exif.new(filename)
dt = exif.info["DateTime"]
tmp = dt.slice(/[0-9]+:[0-9]+:[0-9]+/).gsub(/:/,"-") +
    dt.slice(/ [0-9][0-9]:[0-9]+:[0-9]+/)

ary = ParseDate::parsedate(tmp)
t = Time::local(*ary[0..-3])
p t.to_s

これを実行してみた結果は以下となります。

$ ruby sample4.rb RIMG0011.JPG 
"Tue May 29 03:24:04 +0900 2007"

おぉ、できてます、できてます。
では、ファイルの日付を変更するFileクラスのutimeを使ってスクリプトを作成してみます。

***** sample5.rb *****
require 'parsedate'
require 'ruby-exif'
 
filename = ARGV.shift
 
exif = Exif.new(filename)
dt = exif.info["DateTime"]
tmp = dt.slice(/[0-9]+:[0-9]+:[0-9]+/).gsub(/:/,"-") +
    dt.slice(/ [0-9][0-9]:[0-9]+:[0-9]+/)

ary = ParseDate::parsedate(tmp)
t = Time::local(*ary[0..-3])
File::utime(t, t, filename)

早速、実行してみます。

$ ls -l
total 3328
-rw-r--r--  1 ****  staff  1682244  3 29  2008 RIMG0011.JPG
-rw-rw-rw-@ 1 ****  staff     5758  1  7  2005 ruby-exif.rb
-rw-r--r--@ 1 ****  staff      404  4  7 22:32 sample5.rb
$ ruby sample5.rb RIMG0011.JPG
$ ls -l
total 3328
-rw-r--r--  1 ****  staff  1682244  5 29  2007 RIMG0011.JPG
-rw-rw-rw-@ 1 ****  staff     5758  1  7  2005 ruby-exif.rb
-rw-r--r--@ 1 ****  staff      404  4  7 22:32 sample5.rb

できた、できた!
では、この二つのスクリプトを写真データのたくさん入ったフォルダにコピーして、ファイルの日付を変更していきます。

$ ruby sample5.rb RIMG0011.JPG
$ ruby sample5.rb RIMG0012.JPG
$ ruby sample5.rb RIMG0013.JPG
$ ruby sample5.rb RIMG0014.JPG
$ ruby sample5.rb RIMG0015.JPG
$ ruby sample5.rb RIMG0016.JPG
$ ruby sample5.rb RIMG0017.JPG
$ ruby sample5.rb RIMG0018.JPG
...

...いやいや、こんなことしませんよ。
ちょっと長くなってしまったので、今回はここまで。次回、最終回でフォルダの中にあるファイルを一度に処理するスクリプトを作ってみます。

|

« iPhotoの弱点をRubyで補う[1] | トップページ | iPhotoの弱点をRubyで補う[3] »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/79953/40807565

この記事へのトラックバック一覧です: iPhotoの弱点をRubyで補う[2]:

« iPhotoの弱点をRubyで補う[1] | トップページ | iPhotoの弱点をRubyで補う[3] »