php - 使用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);
}
任何帮助是极大的赞赏。
解决方案
推荐阅读
- python - Micropython构建外部C模块
- android - 如何观察更改对象 Kotlin
- java - 如何从用户输入中获取随机字符并将随机字符存储到数组中?
- firebase - 将 Firebase Cloud Functions 用作 API 时的计费问题
- php - PHP 无法找出正确的日期格式
- mesh - 使用 stl 文件使用 GMSH 创建体积网格
- excel - 使用 Excel vba 创建活动工作表的备份副本
- mysql - 在 mysql 8 中使用 json 字段的表占用的空间比实际数据多得多
- python - 为什么当我更改函数名称时此代码不起作用?
- python - 错误为 TypeError:无法腌制“_thread.RLock”对象