首页 > 解决方案 > 使用exif压缩后如何在上传时更改图像方向 - PHP

问题描述

我尝试使用PHP compressImage 函数压缩图像 ,效果很好。

但是当我尝试上传纵向图像时,它会对其进行压缩并以横向方式上传。在浏览此查询后,我知道当图像被压缩时,它会丢失其EXIF信息,并且默认方向变为 0。

因此,我尝试在使用以下代码压缩图像之前存储EXIF信息:

if (getimagesize($file['tmp_name'])['mime'] === 'image/jpeg') {
      $exif = exif_read_data($file['tmp_name']);
      if (!empty($exif['Orientation'])) {
        $this->file_orientation = $exif['Orientation'];
      }
    }

现在,我尝试了几种方法来使用此信息来更改图像方向,但都导致页面加载失败。

我的整个代码如下所示:

$file = ($_FILES['dp']['name']);
    
    if (getimagesize($file['tmp_name'])['mime'] === 'image/jpeg') {
      $exif = exif_read_data($file['tmp_name']);
      if (!empty($exif['Orientation'])) {
        $this->file_orientation = $exif['Orientation'];
      }
    }
    
    
    $filename = $file;
    $valid_ext = array('png','jpeg','jpg');
    $location = "images-main/users/".$filename;
    
    $tempt = explode(".", $_FILES["dp"]["name"]);
    $newfilenamet = round(microtime(true)) . '.' . end($tempt).$file; 
    
    $file_extension = pathinfo($location, PATHINFO_EXTENSION);
    $file_extension = strtolower($file_extension);
    
    $path = "images-main/users/".$newfilenamet;
    
    if(in_array($file_extension,$valid_ext)){  
        compressImage($_FILES['dp']['tmp_name'], $path, 10);
    }else{
        echo "Invalid file type.";
    }


function compressImage($source, $destination, $quality) {
    $info = getimagesize($source);
    if ($info['mime'] == 'image/jpeg') 
        $image = imagecreatefromjpeg($source);
    elseif ($info['mime'] == 'image/gif') 
        $image = imagecreatefromgif($source);
    elseif ($info['mime'] == 'image/png') 
        $image = imagecreatefrompng($source);
    imagejpeg($image, $destination, $quality);
}

任何帮助是极大的赞赏。

标签: phpimage-compressioncompress-images

解决方案


推荐阅读