25 June 2008

GimpのExifデータ上書き

Gimpは、Exifデータを持つjpegファイルを編集して保存する時に、Exifデータの一部も付けて保存してくれる。しかし、すべてのExifデータが保存されるわけではないし、なによりも最新のバージョン2.4系列からは、(オリジナルのExifではカメラの機種名だった)Software文字列と、編集日時が書き換えられてしまう。

設定ファイル gimp.rc などでこの機能をOFFにする(バージョン2.2互換とする)事が出来ないのか、ソースコードを探ってみたが、結局全て再コンパイルしなければいけないというのが分かっただけだった。

File Type : JPEG MIME Type : image/jpeg JFIF Version : 1.1 Exif Byte Order : Big-endian (Motorola) Make : PENTAX Corporation Camera Model Name : PENTAX *ist DS Orientation : Horizontal (normal) X Resolution : 72 Y Resolution : 72 Resolution Unit : inches Software : GIMP 2.4.5 Modify Date : 2008:06:24 21:23:00 Y Cb Cr Positioning : Co-sited Exposure Time : 1/100 F Number : 5.6 Exposure Program : Program AE ISO : 200 Exif Version : 0221 Date/Time Original : 2007:09:27 09:05:50 Create Date : 2007:09:27 09:05:50 Components Configuration : YCbCr Exposure Compensation : 0

書き換えが行われている部分

jpeg-exif.c
void jpeg_setup_exif_for_save (ExifData *exif_data, const gint32 image_ID) { // ~ 所々、略 ~ /* set software to "GIMP" and include the version number */ if ((entry = exif_content_get_entry (exif_data->ifd[EXIF_IFD_0], EXIF_TAG_SOFTWARE))) { const gchar *name = "GIMP " GIMP_VERSION; entry->data = (guchar *) g_strdup (name); entry->size = strlen (name) + 1; entry->components = entry->size; } /* * set the date & time image was saved * note, date & time of original photo is stored elsewwhere, we * aren't losing it. */ if ((entry = exif_content_get_entry (exif_data->ifd[EXIF_IFD_0], EXIF_TAG_DATE_TIME))) { /* small memory leak here */ entry->data = NULL; exif_entry_initialize (entry, EXIF_TAG_DATE_TIME); } }

ということで、写真を編集する時は、いつまで経ってもVersion 2.2.17 を使い続けることになる…


■ 関連記事
(Ubuntu)GimpでExifのソフトウエア名と日時が書き換えられてしまう問題への対処