我正在创建一个允许人们上传照片的移动应用程序,但是我在使用您可以在此处找到的图像操纵器类调整图像大小时出现问题
https://gist.github.com/philBrown/880506.
我的问题是,当我通过将手机保持在纵向模式拍照时,图像向右旋转90度.当我以横向模式拍照时,一切都很顺利.
这是我的裁剪PHP代码:
$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"]);
如何确保以纵向模式拍摄的照片在裁剪时不会旋转?
编辑*
upload.php代码:
require_once(__DIR__ . '/../includes/ImageManipulator.php');
require_once(__DIR__ . '/../init/db/conn.php');
ob_start();
echo "
";
print_r($_FILES);
print_r($_GET);
print_r($_POST);
echo "
";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"] . "
";
}
else {
echo "Upload: " . $_FILES["Filedata"]["name"] . "
";
echo "Type: " . $_FILES["Filedata"]["type"] . "
";
echo "Size: " . ($_FILES["Filedata"]["size"] / 1024) . " kB
";
echo "Temp file: " . $_FILES["Filedata"]["tmp_name"] . "
";
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();
编辑2
我已将用户@matewka的代码添加到我的PHP中.我用包含的旋转代码编辑了我的PHP.代码根本不会旋转图像.