ガレコレ
Garage Collection
 
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
 
お問い合わせ
by Network Communication Note