如何在上传时仅旋转 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)的图像文件? [旋转后]

java图像上传中如何判断是不是是jpg格式

如何在服务器上保存图像的旋转?

如何在 Android 上旋转 JPEG 文件而不损失质量和增加文件大小?

在 ghostscript 中旋转 jpeg 图像

怎样把图片转换成 gif,png,jpg,jpeg格式