[PHP] iPhoneからメールで送信した画像の向きを修正する方法

自由が丘で働くWeb屋のブログ

[PHP] iPhoneからメールで送信した画像の向きを修正する方法

orientation

iPhoneで撮影した縦画像(縦長の画像)をメールで送信し、その画像をサーバー上で処理すると横向きの画像で処理されてしまう事があります。
原因と解決方法は以下から。

iPhoneからメールで送信した画像が横向きになる原因

iPhoneを縦向き状態で縦画像を撮影した場合でも、iPhone内には横画像(横長の画像)として保存されています。
ではなぜiPhoneでは縦画像を問題なく表示できるかというと、画像データの中に含まれている『Exif』という画像情報に画像の向きが書きこまれているためです。

PHPで画像のExif情報を調べる方法

PHPで画像のExif情報を調べるにはexif_read_data()関数を使用します。

<?php
$file_name = 'test.jpg';
$exif_datas = exif_read_data($file_name);
//返り値として連想配列でExif情報が取得できます。
?>

画像の向きに関する情報は『Orientation』配列に入っており、iPhoneで縦向きに撮影した画像の場合、『6』がセットされています。

Orientationの値 画像の回転方向と回転する角度
$exif_datas[‘Orientation’] = 1 回転無し
$exif_datas[‘Orientation’] = 2 左右反転
$exif_datas[‘Orientation’] = 3 180°回転
$exif_datas[‘Orientation’] = 4 上下反転
$exif_datas[‘Orientation’] = 5 時計回りに90°回転した後、左右反転
$exif_datas[‘Orientation’] = 6 時計回りに90°回転
$exif_datas[‘Orientation’] = 7 反時計回りに90°回転した後、左右反転
$exif_datas[‘Orientation’] = 8 反時計回りに90°回転

画像で表すと下記の様になります。
exif_orientation

PHPで画像の向きを修正する方法

PHPで画像を回転して画像の向きを修正するにはimagerotate()関数を使用します。
iPhoneで撮影した画像の場合、下記の様な処理になります。

<?php
$img_path = '/server_path/hoge.jpg'; //向きを調べる画像のパス
$save_path = '/server_path/moge.jpg'; //向きを変えた画像を保存するパス
$exif_datas = exif_read_data($img_path);
if(isset($exif_datas['Orientation']) && $exif_datas['Orientation'] == 6){
	$source = imagecreatefromjpeg($img_path);
	$rotate = imagerotate($source, 270, 0);
	imagejpeg($rotate, $save_path, 100);
}
//画像を上書きする場合、$img_pathと$save_pathを同一のものにします。
?>
 
カテゴリー:Webシステム開発
タグ:
2011年6月16日 20時08分
 

関連記事

 

コメントを書く

(C) 自由が丘で働くWeb屋のブログ