【PHP】上传图片翻转问题

手机图片上传后获取到的宽高反了,网上的说法是操作系统里的文件属性功能可能已经把图片给修正过了,看到的图片是正确的,但是通过getimagesize获取到的宽高不对;这时需要用到exif扩展的exif_read_data方法获取图片头部信息

 

exif扩展安装:[https://www.cnblogs.com/lanse1993/p/13229238.html]

 

- 获取宽高信息

$orientationArr  = [1 => 0, 8 => -90, 3 => 180, 6 => 90];
$imageInfo       = \exif_read_data($posterImg);
$orientation     = empty($imageInfo['Orientation']) ? -1 : $imageInfo['Orientation'];
if (! empty($orientationArr[$orientation]) && abs($orientationArr[$orientation]) == 90) {
    $posterImgWidth = $imageInfo['ExifImageLength'];
} else {
    $posterImgWidth = getimagesize($posterImg)[0];
}

 

- 需要用来画图时(这里用的Imagick)

复制代码
//载入图像
$this->img = new \Imagick(realpath($imgname));

// 图片是否旋转
$orientationArr  = [1 => 0, 8 => -90, 3 => 180, 6 => 90];
$imageInfo       = \exif_read_data(realpath($imgname));
$orientation     = empty($imageInfo['Orientation']) ? -1 : $imageInfo['Orientation'];
if (! empty($orientationArr[$orientation])) {
    $this->img->rotateImage('#000', $orientationArr[$orientation]);
}
复制代码

 

posted @   蓝色星辰1993  阅读(274)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示