12 February 2010

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

Gimp 2.6以降でExifデータの一部が、書き換えられてしまう。(Gimp 2.2 までは、この様なことはなかったので、ずっと古いバージョンを使ってきた)

Gimp 2.6, 2.8の場合

古いバージョンを使い続けるのは情報弱者のように見られるため、Gimp 2.6で「Exifデータが書き換えられない」ように変更する時の手法のメモ。

ソースコードの入手し、ビルドに必要なライブラリを揃える

# apt-get source gimp
# apt-get build-dep gimp
# cd gimp-2.6.7

ソフトウエア名と日時をオリジナルのまま保つように、次の場所を修正

plug-ins/file-jpeg/jpeg-exif.c
  /* 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);
 ここまでコメントアウト *****/
    }

この状態で、ビルドを行う。なお、file-jpegが生成された時点でCtrl + Cを押してビルドを中止しても構わない。

# ./configure
# make

出来上がった、file-jpeg プラグインを、オリジナルのものに上書きする。

# sudo cp plug-ins/file-jpeg/.libs/file-jpeg /usr/lib/gimp/2.0/plug-ins/

依存ライブラリ等のバージョン不一致エラー

たとえば、次のようなエラーが出た場合

# ./configure
 〜 中略 〜
checking for GEGL... no
configure: error: Package requirements (gegl-0.2 >= 0.2.0) were not met:
 
No package 'gegl-0.2' found
 
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
 
Alternatively, you may set the environment variables GEGL_CFLAGS
and GEGL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

システムには gegl-0.3 がインストールされていて、そちらを使いたいが、configureスクリプトには gegl-0.2が指定されている。 (バージョンチェックは、次のように行う)

# pkg-config --exists --print-errors "gegl-0.3 >= 0.2.0"

configureファイル自体をシステムに合わせて再作成するのは、次のようにする

# aclocal
# automake
# autoconf

関連記事

GimpのExifデータ上書き

Gimp 2.10の場合

Ubuntu 18.04にGimp 最新版のversion 2.10 を、PPA(otto-kesselgulasch)を利用してインストールした場合...

ソースパッケージを解凍し、./configureコマンドを実行すると、libmypaint-devのバージョンが違うということでエラーになる。(1.4.0がインストールされているが、必要なのは1.3.0)

インストール及びソースパッケージのダウンロード後、PPAのリポジトリを無効化する。

そして、【オリジナルのUbuntu18.04のリポジトリ】からlibmypaint-dev(1.3.0) を再インストールする。

そして、

# aclocal
# automake
# autoconf

を行った後に、ソースコードを改変する

libgimp/gimpimagemetadata.c
GimpMetadata *
gimp_image_metadata_save_prepare (gint32                 image_ID,
                                  const gchar           *mime_type,
                                  GimpMetadataSaveFlags *suggested_flags)
{
  GimpMetadata *metadata;
 
  g_return_val_if_fail (image_ID > 0, NULL);
  g_return_val_if_fail (mime_type != NULL, NULL);
  g_return_val_if_fail (suggested_flags != NULL, NULL);
 
  *suggested_flags = GIMP_METADATA_SAVE_ALL;
 
  metadata = gimp_image_get_metadata (image_ID);
 
  if (metadata)
    {
      GDateTime          *datetime;
 
 〜 略 〜
 
      g_snprintf (buffer, sizeof (buffer),
                  "%d:%02d:%02d %02d:%02d:%02d",
                  g_date_time_get_year (datetime),
                  g_date_time_get_month (datetime),
                  g_date_time_get_day_of_month (datetime),
                  g_date_time_get_hour (datetime),
                  g_date_time_get_minute (datetime),
                  g_date_time_get_second (datetime));
      /******* この部分をコメントアウト
      gexiv2_metadata_set_tag_string (g2metadata,
                                      "Exif.Image.DateTime",
                                      buffer);
 
      gexiv2_metadata_set_tag_string (g2metadata,
                                      "Exif.Image.Software",
                                      PACKAGE_STRING);
      ここまでコメントアウト ********/
      gimp_metadata_set_pixel_size (metadata,
                                    image_width, image_height);
 
      gimp_image_get_resolution (image_ID, &xres, &yres);
      gimp_metadata_set_resolution (metadata, xres, yres,
                                    gimp_image_get_unit (image_ID));
 〜 略 〜

そして、ソースコードをビルドして、出来上がったライブラリファイルを/usr/libにコピー

./configure
make
sudo cp libgimp/.libs/libgimpui-2.0.so.0.1000.14 /usr/lib