先日にも同様の質問をさせて頂きましたものです。
あれから、コードを修正しているのですがなかなかうまくいっておらず、
再度投稿させて頂きました。
最終的に下記のコードを書いており、exif情報のOrientationを修正できていると思うのですが、
まだ回転した状態で画像が表示されてしまいます。
コード中にもコメントアウトをして書いておりますが、関数orientationFixedImage()を
実行後はexifのOrientationがnullになっており、修正できていると思っているのですが、、、
$gaikan_photo = $_FILES['gaikan_photo']; // 画像の左右反転 function image_flop($image){ // 画像の幅を取得 $w = imagesx($image); // 画像の高さを取得 $h = imagesy($image); // 変換後の画像の生成(元の画像と同じサイズ) $destImage = @imagecreatetruecolor($w,$h); // 逆側から色を取得 for($i=($w-1);$i>=0;$i--){ for($j=0;$j<$h;$j++){ $color_index = imagecolorat($image,$i,$j); $colors = imagecolorsforindex($image,$color_index); imagesetpixel($destImage,abs($i-$w+1),$j,imagecolorallocate($destImage,$colors["red"],$colors["green"],$colors["blue"])); } } return $destImage; } // 上下反転 function image_flip($image){ // 画像の幅を取得 $w = imagesx($image); // 画像の高さを取得 $h = imagesy($image); // 変換後の画像の生成(元の画像と同じサイズ) $destImage = @imagecreatetruecolor($w,$h); // 逆側から色を取得 for($i=0;$i<$w;$i++){ for($j=($h-1);$j>=0;$j--){ $color_index = imagecolorat($image,$i,$j); $colors = imagecolorsforindex($image,$color_index); imagesetpixel($destImage,$i,abs($j-$h+1),imagecolorallocate($destImage,$colors["red"],$colors["green"],$colors["blue"])); } } return $destImage; } // 画像を回転 function image_rotate($image, $angle, $bgd_color){ return imagerotate($image, $angle, $bgd_color, 0); } // 画像の方向を正す function orientationFixedImage($after,$before){ $image = ImageCreateFromJPEG($before); $exif_datas = @exif_read_data($before); if(isset($exif_datas['Orientation'])){ $orientation = $exif_datas['Orientation']; if($image){ // 未定義 if($orientation == 0){ // 通常 }else if($orientation == 1){ // 左右反転 }else if($orientation == 2){ image_flop($image); // 180°回転 }else if($orientation == 3){ image_rotate($image,180, 0); // 上下反転 }else if($orientation == 4){ image_Flip($image); // 反時計回りに90°回転 上下反転 }else if($orientation == 5){ image_rotate($image,270, 0); image_flip($image); // 時計回りに90°回転 }else if($orientation == 6){ image_rotate($image,90, 0); // 時計回りに90°回転 上下反転 }else if($orientation == 7){ image_rotate($image,90, 0); image_flip($image); // 反時計回りに90°回転 }else if($orientation == 8){ image_rotate($image,270, 0); } } } // 画像の書き出し ImageJPEG($image ,$after); return false; } // iphoneで撮影した元画像 $before = "../../images/images_entrances/" . $gaikan_photo['name']; // 書き出し先の画像ファイル $after = "../../images/images_entrances/" . $gaikan_photo['name']; // $gaikan_photo['name']はechoすると「image0.jpeg」と出力されます. $exifBefore = exif_read_data($before); echo $exifBefore['Orientation'].'<br>'; // この時点ではexifのOrientationは3が表示されます。 // 画像の補正 orientationFixedImage($after,$before); $exifAfter = exif_read_data($after); echo $exifAfter['Orientation'].'<br>'; // この時点ではexifのOrientationはnullが表示されます。 ?> <table> <tr> <th style="height: 230px;"> <img src="../../images/images_entrances/img_shop.png" alt="外観写真"> </th> <td> <?php if ($gaikan_photo['name'] !== "") { if($gaikan_photo['size'] > 7000000) { echo '画像サイズが大きすぎます(7メガまでしかアップロードできません)'; } else { move_uploaded_file($gaikan_photo['tmp_name'], $after); echo '<div> <img id="preview" src="' . $after . '"> </div>'; } } else { echo '<div> <img id="preview" src="../../images/images_entrances/img_shop.png"> </div>'; } ?> </td> </tr> </table>
2度目の質問となりますが、どうかよろしくお願いします。