The Trap of Web Design

NP_Moblog で Exif 情報使う

まだ NP_Moblog でいぢりたいところがあってね。

画像の Exif 使ってできることはいろいろあるんですけど、今回は「画像の向き」

iPhone で撮った画像付きモブログするとき、ホームボタン右にしての横向き撮影でないと、縦横が正しく表示されません。普通、ホームボタン下で縦での撮影をしちゃうほうが多いと思うんですが、それだと反時計周り90度に傾いちゃうのです。ソフトで修正する手間かけるのは自分だってイヤなんで調べたら、Exif にその情報がはいってるんだそうです。だったら取得側でなんとかなるよねってことで。サーバーの PHP が Exif 対応してなくちゃなりませんが、PHP5 だったら大丈夫でなかったっけ?


function _imagePart(&$part) の中をいぢります。メールから画像取り出した後に処理。

$fp = fopen($this->tmpdir.$filename, "w");
fputs($fp, $part->body);
fclose($fp);

のあとに以下を追加。

if (function_exists('exif_read_data')) {
$exif = exif_read_data($this->tmpdir.$filename,'IFD0', true);
$orientation = $exif['IFD0']['Orientation'];
if ($orientation != 1) {
	$newimg = ImageCreateFromJPEG($this->tmpdir.$filename);
	switch ($orientation) {
		case 6: $rotateimg = ImageRotate($newimg,-90,0);break;
		case 8: $rotateimg = ImageRotate($newimg,90,0);break;
		case 3: $rotateimg = ImageRotate($newimg,180,0);break;
		default: break;
	}
	ImageJPEG($rotateimg, $this->tmpdir.$filename);
}
}

これまだ暫定対処で、本来なら元画像のファイルタイプ調べてそれに応じて処理したり、orientation の値は 1、3、6、8 以外もある(鏡像なんて普通使わないとは思うけど)し、あともしかすると保存した画像のアクセス権処理をしないと FTP で画像を取り出せなくなっちゃったりするかも。なので、その処理をいれた function にまとめたほうが良いですな。

もともと iPhone でモブログできねーから始まって調べましたが、以前、普通の携帯からの投稿時にもこれは困っていました。iPhone とは逆に横向き画像は横になってくれない。(全部の機種の仕様は知りませんが)たまたまこの処理してる時に Makeup Tour で DoCoMo からの投稿があったので、元画像を調べたら、Exif の orientation 情報はついてますが、縦でも横でも 1 でした。その場合はマトモになるのは縦撮影の場合です。横にしても orientation 情報が変わらないので、上記の処理は(修正しても)使えません。

あと、Exif 情報取り出して ImageRotate 使って保存し直すと(ImageRotate に限らずサムネイル別画像保存でも)、Exif 情報がなくなっちゃいますね。これに関しては、PEL: PHP Exif Library なんてーのを使うと、そのまま残した処理できるらしい。

… Exif 情報残した画像使って、あとどーするの?といえば GPS 情報使っての処理とか。画像ライブラリーサイトだったら、Exif 情報そのまま掲載、という需要もあるか。

とりあえず、PEL 使った処理は近日きっとやります。

2010-11-15 12:15 | Nucleus | ichiro | permalink


Comments

コメントはまだありません


Portfolio

Stagemind

▲ 珍しくカバーアニメーションとか