現象としてよく分かっていないのだけど、デジカメで撮った画像の撮影日の情報がなくなっているファイルがあることに気がついた。
最近になってdigikamではなくJpegGpxMerger(version 1.4.1)というソフトでGPXファイルの座標情報を書き込むようになったのと関係があるだろうか? JpegGpxMergerはJavaで書かれていて、Windowsでも動作するソフトです。これをVista上で使っているわけ。
で、使用前(というかGPSタグをつけられなかったファイル)のEXIF情報は以下のような感じ。
EXIF tags in '134353.jpg' ('Motorola' byte order): --------------------+---------------------------------------------------------- Tag |Value --------------------+---------------------------------------------------------- Image Description |Exif_JPEG_PICTURE Manufacturer |RICOH Model |GR DIGITAL 2 (snip) Date and Time |2010:08:22 13:43:53 (snip) Exif Version |Exif Version 2.21 Date and Time (origi|2010:08:22 13:43:53 Date and Time (digit|2010:08:22 13:43:53 (snip) Focal Length |5.9 mm Maker Note |29262 bytes undefined data User Comment | (snip) --------------------+---------------------------------------------------------- EXIF data contains a thumbnail (5377 bytes).
使用後は以下。GPSタグがついて、MakerNoteが消えて、Date and Time (origiとDate and Time (digitが途中まで消されている。Date and Timeは残っている。
EXIF tags in '110433.jpg' ('Motorola' byte order): --------------------+---------------------------------------------------------- Tag |Value --------------------+---------------------------------------------------------- Image Description |Exif_JPEG_PICTURE Manufacturer |RICOH Model |GR DIGITAL 2 (snip) Date and Time |2010:08:21 11:04:33 (snip) Software |Jpeg GPX Merger Version 1.4.1 (snip) Exif Version |Exif Version 2.21 Date and Time (origi|1:04:33 Date and Time (digit|1:04:33 (snip) Focal Length |2.3 mm User Comment | (snip) GPS tag version |0x02, 0x00, 0x00, 0x00 North or South Latit|N Latitude |35.00, 35.00, 20.80 East or West Longitu|E Longitude |139.00, 38.00, 53.27 Altitude reference |0x00 Altitude |1.57 InteroperabilityInde|R98 InteroperabilityVers|0100 --------------------+----------------------------------------------------------
まあ日付時刻情報はもともと以下のような4つの中身の同じ情報が入っているという状態だった。
- ファイル名そのもの
- Date and Time = 0x0132
- Date and Time(original) = 0x9003
- Date and Time(digitized) = 0x9004
このうち後ろの2つが壊れて、RICOHのMakerNoteという使っていない情報が消されたというだけのことで、大した実害はない。ただWindowsのExplorerは撮影日としてDate and Time(original)を採用するらしく、このままだとExplorerで日付順ソートとか日付の表示とかができなくなる。
それで、こんな(↓)感じに、同じカメラで同じように撮ったはずの写真なのに、撮影日の情報が入っている画像と入っていない画像ができてしまうというわけ。
メタデータの状態だけを見てJpegGpxMergerのせいだと思いましたが、あまり真面目に確かめてないです。ただ、今JpegGpxMergerのページを見てみたら、開発元でもこの問題は認識されているようですから、すぐに直りそうな気がします。
当面必要なのはむしろ日付情報の修正(復元)ですね。
修正(Date and Timeで上書き)するスクリプトは以下の通り。Cygwinでexifというパッケージを入れれば動きます。
#! /bin/sh export LANG=C for i;do tmp=$(mktemp) s=$(exif -i $i |grep "^0x0132"|cut -f2 -d\|) exif --ifd=EXIF -t 0x9003 --set-value="$s" $i -o $tmp exif --ifd=EXIF -t 0x9004 --set-value="$s" $tmp -o $i rm $tmp done
Cygwinで書くとまた問題があって、変なACLの情報がついてアイコンの片隅に変なマークがつくことがあったりしました。
Linuxの場合は、Fedora 13とかのyumにはlibexifはありますがexifコマンドは入っていません。libexif-develやpopt-develを入れた状態でexif-0.6.19.tar.bz2をダウンロードしてきて、以下のようにするとexifコマンドが入ります。exifコマンドさえあれば、そのまま動くだろうと思います。
- rpmbuild -tb exif-0.6.19.tar.bz2
- rpm -Uvh /path/to/rpm/RPMS/$(uname -m)/exif-0.6.19-1.$(uname -m).rpm
JpegGpxMergerは他にも、同じディレクトリにすでにGPSタグを入れた画像が入っていると処理できなくなったりしてましたが、たぶん日付の情報が壊れてしまったため、読み込みでエラーになってたんでしょう。