PHP获取图片宽高时,宽度与高度相反 phpexif_read_data函数
super
2022-06-11 10:34

使用getimagesize或者getID3获取图片信息时,图片高度与宽度相反


目前发现这个现象仅存在于IPhone拍出的照片
解决方法:
1)开启PHP exif拓展,PHP7.4版本默认是关闭的

注意:需同时打开mbstring拓展,他们有依赖
2)在解析图片之前先处理图片
$imgsrc = './your_image.jpg';
try {
$exif = exif_read_data($imgsrc, 0,true);
} catch (Exception $e) {
$exif = false;
}
if ($exif !== false) {
if(isset($exif['IFD0']['Orientation'])) {
$source = imagecreatefromjpeg($imgsrc);
// 判断翻转角度
switch ($exif['IFD0']['Orientation']) {
case 8:
$image = imagerotate($source, 90, 0);
break;
case 3:
$image = imagerotate($source, 180, 0);
break;
case 6:
$image = imagerotate($source, -90, 0);
break;
}
if (isset($image)) {
// 保存到本地
imagejpeg($image, $imgsrc);
// 销毁
imagedestroy($image);
}
}
}
3)再次解析图片
print_r( getimagesize($imgsrc));

解析正常
0 条讨论