如何在上传时仅旋转 jpg 和 jpeg?
Posted
技术标签:
【中文标题】如何在上传时仅旋转 jpg 和 jpeg?【英文标题】:How can I rotate only jpg and jpeg on upload? 【发布时间】:2016-08-07 03:15:15 【问题描述】:下面我有一个非常简单的上传脚本,可以上传 png、jpg 和 jpeg 格式的图像。
我知道 png 图像将保持方向,因为该文件没有关于其方向的信息。 但是,上传 jpg 或 jpeg 时,纵向图像会逆时针旋转 90 度。
我怎样才能只旋转 jpg 和 jpeg 以获得正确的方向?
P.s 这个上传脚本也会把图片路径更新到 mysql 中
非常感谢您的帮助!
<?php
if (isset($_FILES['image']))
$errors = array();
$file_name = $_FILES['image']['name'];
$file_size = $_FILES['image']['size'];
$file_tmp = $_FILES['image']['tmp_name'];
$file_type = $_FILES['image']['type'];
$file_ext = strtolower(end(explode('.',$_FILES['image']['name'])));
$img_path = ("images/".$file_name);
$expensions = array("jpeg","jpg","png");
if (in_array($file_ext,$expensions)=== false)
$errors[] = "extension not allowed, please choose a JPEG or PNG file.";
if ($file_size > 2097152)
$errors[] = 'File too large';
if (empty($errors) == true)
// connect to the database
$servername = 'HOST';
$username = 'USER';
$password = 'PASS';
$dbname = 'TABLE';
$current_user = $_SESSION['user_name'];
try
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "UPDATE users SET image_name='$file_name', image_size='$file_size', image_path='$img_path' WHERE user_id = $current_user";
// Prepare statement
$stmt = $conn->prepare($sql);
// execute the query
$stmt->execute();
// echo a message to say the UPDATE succeeded
echo "";
catch(PDOException $e)
echo $sql . "<br>" . $e->getMessage();
$conn = null;
move_uploaded_file($file_tmp,"images/".$file_name);
echo "";
else
print_r($errors);
?>
【问题讨论】:
你可以尝试查看 php 手册上的 imagerotate php.net/manual/en/function.imagerotate.php 【参考方案1】:你需要使用imagerotate() php函数。
$degrees = 90; //required value here
$img_path = ("images/".$file_name);
$source = imagecreatefromjpeg($filename);
$rotate = imagerotate($source, $degrees, 0);
$extension = substr(strrchr($file_name,'.'),1);
if ($extension == jpg || $extension == jpeg)
imagejpeg($rotate);
imagedestroy($source); //free memory
imagedestroy($rotate);
【讨论】:
得到了这个工作,但它只适用于手机而不是更大的设备。以上是关于如何在上传时仅旋转 jpg 和 jpeg?的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何保存不是(JPEG 和 PNG)的图像文件? [旋转后]