PHPでandroid,iphoneからの画像の回転処理

AndroidやiPhoneでは画像を保存した時縦横のサイズではなくExifのOrientationで画像の向きを管理しているらしい。

なるほど、そのまま縮小しても向きがおかしいはずだ。

よってOrientationを考慮した動作が必要になる。

// コピー元画像の指定
$targetImage = $target_path;
// ファイル名から、画像インスタンスを生成
$image = imagecreatefromjpeg($targetImage);
// コピー元画像のファイルサイズを取得
list($image_w, $image_h) = getimagesize($targetImage);

// 出力する画像サイズの指定
//$width =640;
//$height = $width*$image_h/$image_w;


$min_width = 800; // 幅の最低サイズ
$min_height = 800; // 高さの最低サイズ


if($image_w == $image_h) {
   $width = $min_width;
   $height = $min_height;
} else if($image_w > $image_h) {//横長の場合
   $width = $min_width;
   $height = $image_h*($min_width/$image_w);
} else if($image_w < $image_h) {//縦長の場合
   $width = $image_w*($min_height/$image_h);
   $height = $min_height;
}


// サイズを指定して、背景用画像を生成
$canvas = imagecreatetruecolor($width, $height);

// 背景画像に、画像をコピーする
imagecopyresampled($canvas,  // 背景画像
      $image,   // コピー元画像
      0,        // 背景画像の x 座標
      0,        // 背景画像の y 座標
      0,        // コピー元の x 座標
      0,        // コピー元の y 座標
      $width,   // 背景画像の幅
      $height,  // 背景画像の高さ
      $image_w, // コピー元画像ファイルの幅
      $image_h  // コピー元画像ファイルの高さ
);



$exif_datas = exif_read_data($target_path);
//返り値として連想配列でExif情報が取得できます。

//var_dump($exif_datas);
if(isset($exif_datas["Orientation"])){
 if($exif_datas["Orientation"]==6){

 // 回転
 $canvas = imagerotate($canvas, 270, 0);

 }
 if($exif_datas["Orientation"]==8){

 // 回転
 $canvas = imagerotate($canvas, 90, 0);

 }
 if($exif_datas["Orientation"]==3){

 // 回転
 $canvas = imagerotate($canvas, 180, 0);

 }
 }
// 画像を出力する
imagejpeg($canvas,           // 背景画像
      "./shohou_image_m/".$new_dir."/" . basename( $_FILES['f1']['name'])."_0.jpg",    // 出力するファイル名(省略すると画面に表示する)
      100                // 画像精度(この例だと100%で作成)
);

// メモリを開放する
imagedestroy($canvas);

こんなところかなー

↓弊社で開発、販売しているソフトウェアです↓

MediMonitor無料ダウンロード  

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です