iPhotoの弱点をRubyで補う[1]
別にiPhotoに限ったことではありませんが、PTP Class仕様のデジカメから画像を取り込むとファイルの日付は取り込んだ日時になり、撮影した日付にはならないようです。Ubuntuで取り込んでみてもやっぱり撮影した日がファイルの日付にはなりませんでした。
僕はデジカメで撮った写真をiPhotoで取り込んでいるのですが、画像データ自体は昔から年月別のフォルダを作ってファイルサーバ上で管理しています。
そのため、分類する際にファイルの日付が取り込んだ日付けになっているととても不便です。
iLife'05ではきちんと撮影した日になっていたような気がするのですが、iLife'06では上記のように取り込んだ日になっていますので、これらの画像を一つ一つ確認しながらフォルダに分類するのはちょっと大変です。
そこで、Rubyを使ってこれを解決しようと思います。
まず、知らなくてはならないことは以下の2点かな。
・画像データから撮影日を取得する方法
・ファイルの日付を変更する方法
画像データには撮影した日付ばかりではなく、カメラのメーカーや機種等多くの情報を保存するEXIFという規格があるらしい。ということは、きっとこの情報を操作するライブラリがあるはず...早速Google先生に聞いてみたところ、以下のサイトが見つかりました。
組みたり。ぬ早速、ruby-exif.rbをダウンロードして動作確認をしてみます。
require 'ruby-exif' filename = ARGV.shift exif = Exif.new(filename) p exif.app1_size exif.info.each {|itm| print "#{itm}\n" }
実行結果はこんな感じ。
$ ruby sample1.rb RIMG0011.JPG 48758 Copyright(C) by Caplio R7 User ImageDescriptionExif_JPEG_PICTURE ModelCaplio R7 XResolution72/1 MakerRICOH ResolutionUnit2 ExifIFDPointer312 YCbCrPositioning2 DateTime2007:05:29 03:24:04 YResolution72/1 Orientation1
なんだかうまく行きそう。
日付の取得に特化するなら以下のような書き方になります。
require 'ruby-exif' filename = ARGV.shift exif = Exif.new(filename) p exif.info["DateTime"]
実行してみると、以下のような結果が帰ってきました。
$ ruby sample1.rb RIMG0011.JPG "2007:05:29 03:24:04\000"
次回は取得した日付をファイルの作成日(更新日)として利用できるように工夫してみようと思います。
| 固定リンク
コメント
Macを買ってしばらくはiPhotoを使っていたのですが,管理する写真が1万枚を超えたあたりから,やたらと動作が重くなってしまい使用を断念しました。最新のバージョンなら改善されているかもしれませんが。
今は取り込んだ日付のフォルダで管理しているだけで,ぜんぜん整理されていません。
フィルムをデジタイズしたものだとExif情報も付きませんし,写真の整理は頭の痛い問題です。
投稿: ソウヘイ | 2008/04/07 21:56
ソウヘイさん、コメントありがとうございます。
1万枚ってすごいですね。
僕の場合、iPhotoは取り込みのみで、ファイルサーバに移動したら消してしまいますので、新版のiPhotoだと扱えるファイルが多いかどうかはちょっとわからないです。
確かに写真の整理は大変ですよね。ちょっとさぼるとやる気がなくなってしまいますし、デジカメばかりか携帯でも写真を撮るようになってから、その労力はどんどん増すばかり...少しでもこれを楽にしたいなと思う日々です。
投稿: きむらしのぶ | 2008/04/07 23:09