2016年4月6日(水)
画像の回転補正 #■子猫の手 exif_read_data()で画像の回転状況を把握し、回転補正が必要な場合はimagerotate()で回転した画像を作成する。imagerotate()は、メモリー食いで困った。使用できるメモリーを再設定する必要がある。
--プログラム rotate.php--
<?php
header('Content-type:image/jpeg');
$file = 'image.jpg';
$exif = exif_read_data($file);
if( isset($exif["Orientation"]) ){
$Orientation = $exif["Orientation"];
}else{
$Orientation = 1;
}
switch($Orientation){
case 3:
$deg = 180;
break;
case 6:
$deg = 270;
break;
case 8:
$deg = 90;
break;
default:
readfile($file);
exit;
}
$image = imagecreatefromjpeg($file);
$rotate = imagerotate($image,$deg,0);
imagejpeg($rotate);
imagedestroy($image);
imagedestroy($rotate);
?>
--
Microsoft Edge、および、IE11でも、縦長に表示される。
なお、画像出力がreadfile()でもimagejpeg()でも、画像ファイルの保存時、PHPファイル名[rotate.php]を引き継いで、[rotate.jpg]となる。
いずれ、すべてのブラウザがExifをサポートするだろうから、オリジナル・ファイルは加工せずに、サーバに上げたい。サムネールの作成には、実装しなければいけない。
問題は、サーバの消費メモリーである。どれだけ必要か検証してから、実装するかどうかを決定する。JavaScriptの方は、クライアントのメモリーを使うので、こちらの方が良いかも知れない。
http://neconote.jp/php/rotate.html