備忘録 WordPress

imsanityでexifをコピー

2012年11月2日

お、この写真いいな~

いつどの場所でどのカメラでどのレンズでとったのかな?

と思う時につい調べてしまうことってありませんか?

カメラを持っている人は結構思っているかもしれません。最近では携帯カメラとかでも画質とか撮り方とかで気になる人もいるでしょう。

画像ファイルには撮影状況を記録する方法があります。それをexifといいます。

wordpressを始め、画像編集を行うとexifが消えてしまうことがあります。

私の場合はimsanityで自動トリミングをしているのでものすごく重宝していますが、exif情報は消えてしまいます。

しかし、撮影している以上、できればexif情報を残したい。

そういう思いで少し改造することにしました。

※リサイズ(image_resize関数)を使う為、Imagickが既にインストールされていることを前提とします。
されていない方はapt-getかyum等でImageMagickやphp-pecl-imagickをインストールしてください。(Wordpress3.5でも動いてます……)

PHPでは標準でexifを読み込む関数は備わっていますが、書き込む関数は存在しません。

なので、今回は読み書きができるPHPライブラリPel PHPを使用することにしました。

まず、ここからPel PHPを取得します。

ZIP形式とTAR形式、GITの3つから好きなのを選んでダウンロードし解凍します。

解凍したフォルダのなかでsrcフォルダを適当なとこに保存します。他のファイルは特に使いません。

そして、wp-content/plugins/imsanity/imsanity.phpを編集します。
110行目あたりで

$resizeResult = image_resize( $oldPath, $newW, $newH, false, null, null, $quality);

を以下に変更します。

//Exifの取得
//Pelを読み込む
require_once('/home/*****/Pel/PelJpeg.php');
//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;
}
//リサイズ(既存ソース)
$resizeResult = image_resize( $oldPath, $newW, $newH, false, null, null, $quality);

//exifが存在する場合はリサイズ後データにexifを挿入
if($exif != null){
	//リサイズ後データをロード
	$output_image = new PelJpeg($resizeResult);

	//リサイズ後データにexifの書き込み
	$output_image->setExif($exif);

	//リサイズ後データのファイル書き込み
	$output_image->saveFile($resizeResult);
}

これでexifのコピーができます。

上がexifあり、下がexifなし。

画像クリックすると右上に【画像の情報】でexif情報がわかります。

しかし、サムネイル画像は相変わらずexifなしなので、そこを修正するにはwordpressのコアファイル自体を修正しないといけないかもしれませんね。

場合によってはGPS等一部のファイルだけ消したいまたは改変したい場合があるかもしれません。

それは次回に掲載しようと思います。

-備忘録, WordPress
-, , ,