技術・開発

【WordPress】ImsanityでリサイズしてもEXIF情報を残すカスタマイズ方法(Pel PHP使用)

2012年11月2日

「お、この写真いいな〜。いつ、どの場所で、どのカメラとレンズで撮ったんだろう?」

ブログやサイトで素敵な写真を見たとき、つい撮影情報(EXIF)を調べたくなることはありませんか?
カメラが趣味の方や、スマホの画質・撮り方にこだわっている方なら、一度は気になったことがあるはずです。

画像ファイルには、そういった撮影時のメタデータを記録する「EXIF」という仕組みがありますが、WordPressにアップロードしたり、画像編集を通したりすると、このEXIF情報が消えてしまうことがよくあります。

私のブログでは、画像を自動でリサイズ・軽量化してくれる便利なプラグイン「Imsanity」を重宝しているのですが、やはりEXIF情報が消えてしまうのが悩みの種でした。
「自動トリミングは便利だけど、カメラ好きとしてはEXIFを残したい!」という思いから、プラグインの処理に少し手を加えることにしました。

前提条件と準備

今回は、PHPでEXIFの読み書きができるライブラリ「Pel (PHP Exif Library)」を使用してカスタマイズを行います。

  • 前提条件:リサイズ処理(image_resize関数)を利用するため、サーバーに ImageMagickphp-pecl-imagick等)がインストールされている必要があります。未導入の方は yumapt-get 等でインストールしてください。
  • Pelの取得GitHub (lsolesen/pel) などからPelライブラリをダウンロード・解凍し、中にある src フォルダをサーバーの任意の場所に保存しておきます。

Imsanityのコアファイルを編集する

FTP等でサーバーにアクセスし、Imsanityの実行ファイルを編集します。
※プラグインをアップデートすると編集内容が上書きされてしまうため、ご注意ください。

編集ファイル:wp-content/plugins/imsanity/imsanity.php

110行目付近にある以下のリサイズ実行コードを探します。

// 変更前
$resizeResult = image_resize( $oldPath, $newW, $newH, false, null, null, $quality);

この部分を、丸ごと以下のコードに置き換えます。

// 変更後

// Pelライブラリの読み込み(※パスはご自身の環境に合わせて変更してください)
require_once('/home/*****/Pel/PelJpeg.php');

// 1. オリジナル画像からEXIFデータを取得
if ( (!is_wp_error($params)) && file_exists($oldPath) && in_array($params['type'], array('image/jpeg'))) {
    // 元ファイルをロード
    $input_image = new PelJpeg($oldPath);
    // EXIFの取得
    $exif = $input_image->getExif();
} else {
    // JPEG以外はEXIFを読み込まない
    $exif = null;
}

// 2. Imsanity本来のリサイズ処理を実行
$resizeResult = image_resize( $oldPath, $newW, $newH, false, null, null, $quality);

// 3. EXIFが存在する場合は、リサイズ後のデータにEXIFを書き戻す
if ($exif != null) {
    // リサイズ後データをロード
    $output_image = new PelJpeg($resizeResult);
    // EXIF情報のセット
    $output_image->setExif($exif);
    // ファイルの上書き保存
    $output_image->saveFile($resizeResult);
}

EXIFコピーの動作確認

カスタマイズ完了後、実際に画像をアップロードして動作確認を行いました。

▼ EXIF情報が保持されている画像

▼▼ EXIF情報が消えている画像 ▼▼

ブラウザの拡張機能等で画像プロパティ(画像の情報)を確認すると、無事にカメラの機種や絞り値などが残っていることが確認できました!

残された課題

フルサイズの画像にはEXIFを残すことができましたが、WordPressが自動生成するサムネイル画像は相変わらずEXIFなしのままです。ここを修正するには、ImsanityではなくWordPressのコアファイル自体を修正する必要がありそうです。

また、EXIFを残すのは嬉しい反面、自宅で撮影した写真の「GPS(位置情報)」まで残ってしまうというプライバシーの懸念もあります。 場合によっては、GPSなど特定のメタデータだけを削除、あるいは改変する処理が必要になりますね。その具体的な方法については、次回の記事で解説しようと思います!

-技術・開発
-, , , , , , ,