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

