Need to fix image rotation problem when uploading and resizing images.

by man5
1 replies
This new issue arose when I tried uploading an image to my website from Iphone. Iphone apparently only saves landscape based photos, despite the fact they were taken in portrait mode. To fix it I found out to use exif_read_data to rotate the photo into it's original place.

I have a function that does that. The image does rotate. However, the image also gets cut off at the bottom and the remaining width of the image is turned into black background. I've attached a sample to show you.

This only happens when uploading a portrait photo from iphone. Landscape taken photos look fine.

Here is my code. Hopefully you can point out something that I am not seeing.

PHP Code:
// Uploading image with resize and crop.         if (isset($_FILES['image'])) {              if (empty($_FILES['image']['name'])) {                          ?><div class="add-errors">Please choose an image!</div><?php                           }    else {                                       function getOrientedImage($imagePath){                 $image imagecreatefromstring(file_get_contents($imagePath));                 $exif exif_read_data($imagePath);                 if(!empty($exif['Orientation'])) {                     switch($exif['Orientation']) {                         case 8:                             $image imagerotate($image,90,0);                             break;                         case 3:                             $image imagerotate($image,180,0);                             break;                         case 6:                             $image imagerotate($image,-90,0);                             break;                     }                 }                 return $image;             }                          $name         =    $_FILES['image']['name'];             $temp         =    $_FILES['image']['tmp_name'];             $type        =    $_FILES['image']['type'];             $size        =    $_FILES['image']['size'];             $ext         =    strtolower(end(explode('.'$name)));             $size2        =    getimagesize($temp);             $width         =    $size2[0];             $height     =    $size2[1];             $upload     =    md5rand01000 ) . rand01000 ) . rand01000 ) . rand01000 ));                          // Restrictions for uploading             $maxwidth    =    6000;             $maxheight    =    6000;             $allowed    =    array('image/jpeg', 'image/jpg', 'image/png', 'image/gif');                          // Recognizing the extension             switch($type){                                          // Image/Jpeg                 case 'image/jpeg':                         $ext= '.jpeg';                 break;                                  // Image/Jpg                 case 'image/jpg':                         $ext= '.jpg';                 break;                                  // Image/png                 case 'image/png':                         $ext= '.png';                 break;                                  // Image/gif                 case 'image/gif':                         $ext= '.gif';                 break;             }              // upload variables             $path            =   $userDir . $upload . $ext;             $thumb_path        =   $userDir . 'thumb_' . $upload . $ext;                              // check if extension is allowed.             if (in_array($type, $allowed)) {                                  // Checking if the resolution is FULLHD or under this resolution.                 if ($width <= $maxwidth && $height <= $maxheight) {                     if ($size <= 5242880) {                                                  // check the shape of the image                         if ($width == $height) {$shape = 1;}                         if ($width > $height) {$shape = 2;}                         if ($width < $height) {$shape = 3;}                                                  //Adjusting the resize script on shape.                         switch($shape) {                                                          // Code to resize a square image.                             case 1:                                 $newwidth =        816;                                 $newheight =    612;                             break;                                                          // Code to resize a tall image                             case 2:                                 $newwidth     =    816;                                  $ratio         =    $newwidth / $width;                                 $newheight    =    round($height * $ratio);                             break;                                                          // Code to resize a wide image.                             case 3:                                 $newheight  =    612;                                 $ratio        =    $newheight / $height;                                 $newidth     =    round($width * $ratio);                             break;                                                      }                                                  // Resizing according to extension.                         switch ($type) {                                                      // Image/Jpeg                                 case 'image/jpeg';                                 $img =        getOrientedImage($temp);                                 $thumb =    imagecreatetruecolor($newwidth, $newheight);                                             imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);                                             imagejpeg($thumb, $thumb_path);                             break;                                                          // Image/Jpg                                 case 'image/jpg';                                 $img =        getOrientedImage($temp);                                 $thumb =    imagecreatetruecolor($newwidth, $newheight);                                             imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);                                             imagejpeg($thumb, $thumb_path);                             break;                                                          // Image/png                                 case 'image/png';                                 $img =        getOrientedImage($temp);                                 $thumb =    imagecreatetruecolor($newwidth, $newheight);                                             imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);                                             imagepng($thumb, $thumb_path);                             break;                                                          // Image/gif                                 case 'image/gif';                                 $img =        getOrientedImage($temp);                                 $thumb =    imagecreatetruecolor($newwidth, $newheight);                                             imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);                                             imagegif($thumb, $thumb_path);                             break;                         }                                                                                   // Move the original file aswell.                             move_uploaded_file($temp, $path);                                                                           } else {                         ?><div class="add-errors">Your image size is too big!</div><?php                     }                 } else {                     ?><div class="add-errors">Your image resolution exceeds the limit!</div><?php                 }              } else {                 ?><div class="add-errors">Your have uploaded a forbidden extension!</div><?php              }                      }
#fix #image #problem #rotation

Trending Topics