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のソフトウエア名と日時が書き換えられてしまう問題への対処