Sorry for the briefness, lack of time strikes again.
In this code snippet, $tmpFile is the path to the image file, and for simplicity’s sake here it’s always a JPG.
We define our own function “custImageFlip” to flip the picture (and I put it at the end because it’s secondary, but if you want to use the code as-is you’ll need to put it at the top), but if your target is PHP>=5.5, you can just use PHP’s native imageflip.
Code for the switch is hugely based on code by someone in the comments in PHP’s documentation.
Code for the PHP<5.5 implementation to flip the image is from another comment in PHP’s doc.
Last but not least, a great image pack that will allow you to test all those picture rotations and flips: https://github.com/recurser/exif-orientation-examples
$tmpImage = @imagecreatefromjpeg($tmpFile); $exif = exif_read_data($tmpFile); //die(json_encode($exif)); if($exif!==false) { $ort=1; if(isset($exif['Orientation'])) { // orientation is usually here $ort=$exif['Orientation']; } elseif(isset($exif['IFD0']) && isset($exif['IFD0']['Orientation'])) { // but apparently it can be here sometimes? $ort=$exif['IFD0']['Orientation']; } switch($ort) { case 1: // nothing break; case 2: // horizontal flip $tmpImage=custImageFlip($tmpImage,2); break; case 3: // 180 rotate left $tmpImage=imagerotate($tmpImage,180,0); break; case 4: // vertical flip $tmpImage=custImageFlip($tmpImage,1); break; case 5: // vertical flip + 90 rotate right $tmpImage=custImageFlip($tmpImage,1); $tmpImage=imagerotate($tmpImage,-90,0); break; case 6: // 90 rotate right $tmpImage=imagerotate($tmpImage,-90,0); break; case 7: // horizontal flip + 90 rotate right $tmpImage=custImageFlip($tmpImage,2); $tmpImage=imagerotate($tmpImage,-90,0); break; case 8: // 90 rotate left $tmpImage=imagerotate($tmpImage,90,0); break; } } // ImageFlip from https://php.net/manual/en/function.imagecopy.php#89658 function custImageFlip($imgsrc,$mode) { $width=imagesx($imgsrc); $height=imagesy($imgsrc); $src_x=0; $src_y=0; $src_width=$width; $src_height=$height; switch ($mode) { case '1': //vertical $src_y=$height-1; $src_height=-$height; break; case '2': //horizontal $src_x=$width-1; $src_width=-$width; break; case '3': //both $src_x=$width-1; $src_y=$height-1; $src_width=-$width; $src_height=-$height; break; default: return $imgsrc; } $imgdest = imagecreatetruecolor ($width,$height); if(imagecopyresampled($imgdest, $imgsrc, 0, 0, $src_x, $src_y , $width, $height, $src_width, $src_height)){ return $imgdest; } return $imgsrc; }
0 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.