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);
こんなところかなー