场景
在 PHP 中使用函数getimagesize
获取到的图片宽高反了.
经过测试, 发现是用手机拍的照片中添加了图片的旋转信息. 导致查看的时候图片是经过旋转的, 所以看起来宽高反了.
解决
判断图片是否存在旋转, 若存在则交换图片宽高
/**
* 获取图片的宽高
* @param $imagePath
* @return int[]
*/
private function getImageWidthAndHeight($imagePath) {
$imageInfo = getimagesize($imagePath);
$imageWidth = $imageInfo[0] ?? 0;
$imageHeight = $imageInfo[1] ?? 0;
$mimeType = $imageInfo[2] ?? 0;
if($mimeType == IMAGETYPE_JPEG){
// 图片可能是用户手机拍照图, 尝试从中提取旋转信息
$exif = @exif_read_data($imagePath);
if(!empty($exif['Orientation']) && in_array($exif['Orientation'], [6, 8])) {
[$imageWidth, $imageHeight] = [$imageHeight, $imageWidth];
}
}
return [$imageWidth, $imageHeight];
}