PHP Image Rotation

I am creating a mobile application that allows people to upload photos, but I have a problem resizing images using the Image Manipulator Class, which you can find here https://gist.github.com/philBrown/880506 .

My problem is that when I take pictures while keeping my phone in portrait mode, the image rotates 90 degrees to the right. When I photograph in landscape mode, everything is going well.

Here is my cropping CSS:

$manipulator = new ImageManipulator($_FILES['Filedata']['tmp_name']); $width = $manipulator->getWidth(); $height = $manipulator->getHeight(); $centreX = round($width / 2); $centreY = round($height / 2); // our dimensions will be 600x450 $x1 = $centreX - 300; // 600 / 2 $y1 = $centreY - 225; // 450 / 2 $x2 = $centreX + 300; // 600 / 2 $y2 = $centreY + 225; // 450 / 2 // center cropping to 600x450 $newImage = $manipulator->crop($x1, $y1, $x2, $y2); // rotate 90 degrees to the right $imageResource = $newImage->getResource(); $angle = '90'; // in degrees $fileName = "../file_upload_img/43/" . $random_file_name . $_FILES["Filedata"]["name"]; $rotatedImage = imagerotate($imageResource, $angle); imagejpeg($rotatedImage, $fileName, 95); // saving file to uploads folder $manipulator->save("../file_upload_img/43/" . $random_file_name . $_FILES["Filedata"]["name"]); 

How can I make sure that photographs taken in portrait mode do not rotate when cropped?

EDIT *

Upload.php Code:

 require_once(__DIR__ . '/../includes/ImageManipulator.php'); require_once(__DIR__ . '/../init/db/conn.php'); ob_start(); echo "<pre>"; print_r($_FILES); print_r($_GET); print_r($_POST); echo "</pre>"; print_r("file type: " . $_FILES["Filedata"]["type"]); $allowedExts = array("gif", "jpeg", "jpg", "png"); $temp = explode(".", $_FILES["Filedata"]["name"]); $extension = end($temp); if ((($_FILES["Filedata"]["type"] == "image/gif") || ($_FILES["Filedata"]["type"] == "image/jpeg") || ($_FILES["Filedata"]["type"] == "image/jpg") || ($_FILES["Filedata"]["type"] == "image/pjpeg") || ($_FILES["Filedata"]["type"] == "image/x-png") || ($_FILES["Filedata"]["type"] == "image/png")) && ($_FILES["Filedata"]["size"] < 9999999999) && in_array($extension, $allowedExts)) { if ($_FILES["Filedata"]["error"] > 0) { echo "Return Code: " . $_FILES["Filedata"]["error"] . "<br>"; } else { echo "Upload: " . $_FILES["Filedata"]["name"] . "<br>"; echo "Type: " . $_FILES["Filedata"]["type"] . "<br>"; echo "Size: " . ($_FILES["Filedata"]["size"] / 1024) . " kB<br>"; echo "Temp file: " . $_FILES["Filedata"]["tmp_name"] . "<br>"; if (file_exists("../file_upload_img/" . $_FILES["Filedata"]["name"])) { echo $_FILES["Filedata"]["name"] . " already exists. "; } else { $random_file_name = sha1(uniqid($_FILES["Filedata"]["name"])); /* * ROTATE, CROP AND RESIZE */ // 4:3 Ratio version $manipulator = new ImageManipulator($_FILES['Filedata']['tmp_name']); // Resize image to 600px wide and 450px high $manipulator = $manipulator->resample(600, 450); // saving file to uploads folder $manipulator->save("../file_upload_img/43/" . $random_file_name . $_FILES["Filedata"]["name"]); $width = $manipulator->getWidth(); $height = $manipulator->getHeight(); $centreX = round($width / 2); $centreY = round($height / 2); // our dimensions will be 600x450 $x1 = $centreX - 300; // 600 / 2 $y1 = $centreY - 225; // 450 / 2 $x2 = $centreX + 300; // 600 / 2 $y2 = $centreY + 225; // 450 / 2 // center cropping to 200x130 $newImage = $manipulator->crop($x1, $y1, $x2, $y2); // rotate 90 degrees to the right $imageResource = $newImage->getResource(); $angle = '90'; // in degrees $fileName = "../file_upload_img/43/" . $random_file_name . $_FILES["Filedata"]["name"]; $rotatedImage = imagerotate($imageResource, $angle); imagejpeg($rotatedImage, $fileName, 95); // saving file to uploads folder $manipulator->save("../file_upload_img/43/" . $random_file_name . $_FILES["Filedata"]["name"]); // 640:120 Ratio version $manipulator_640 = new ImageManipulator($_FILES['Filedata']['tmp_name']); // Resize image to 640px wide and 120px high $manipulator_640 = $manipulator_640->resample(640, 120); // saving file to uploads folder $manipulator_640->save("../file_upload_img/header/" . $random_file_name . $_FILES["Filedata"]["name"]); $width_640 = $manipulator_640->getWidth(); $height_640 = $manipulator_640->getHeight(); $centreX_640 = round($width_640 / 2); $centreY_640 = round($height_640 / 2); // our dimensions will be 640x120 $x1_640 = $centreX_640 - 320; // 640 / 2 $y1_640 = $centreY_640 - 60; // 120 / 2 $x2_640 = $centreX_640 + 320; // 640 / 2 $y2_640 = $centreY_640 + 60; // 120 / 2 // center cropping to 640x120 $newImage_640 = $manipulator_640->crop($x1_640, $y1_640, $x2_640, $y2_640); // saving file to uploads folder $manipulator_640->save("../file_upload_img/header/" . $random_file_name . $_FILES["Filedata"]["name"]); /* ***************** */ } } } else { echo "Invalid file"; } $data=ob_get_clean(); 

EDIT 2

I added code from user @matewka to my PHP. I edited my PHP with rotating code enabled. The code does not rotate the image at all.

+5
source share
2 answers

Regarding your last comment:

I only realized that the phone itself had already rotated the image after I took it. How can I rotate recently taken pictures by phone so that they look normal?

to rotate an image in PHP you can use the imagerotate function. So, right after you crop the image and save it in the $newImage variable, do the following:

 $imageResource = $newImage->getResource(); $angle = '90'; // in degrees $fileName = "../file_upload_img/43/" . $random_file_name . $_FILES["Filedata"]["name"]; $rotatedImage = imagerotate($imageResource, $angle); imagejpeg($rotatedImage, $fileName, 95); 
+2
source

Fix image orientation using exif_read_data

 function orientation($path){ $image = imagecreatefromjpeg($path); $exif = exif_read_data($path); $orientation = $exif['COMPUTED']['Orientation']; switch ($orientation) { case 3: $image = imagerotate($image, 180, 0); break; case 6: $image = imagerotate($image, -90, 0); break; case 8: $image = imagerotate($image, 90, 0); break; } imagejpeg($image, $path); } 

4 possible orientations possible [Here]

+2
source

Source: https://habr.com/ru/post/1209545/


All Articles