PHP 图片宽高获取错误

场景

在 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];
}
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请发表评论。x