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°回転 |
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を同一のものにします。 ?>
コメント