解决上传iphone拍照的图片自动翻转的问题

昨天遇到一个奇怪的问题,客户用iphone拍照后上传的图片在生成缩略图时被翻转了,
解决上传iphone拍照的图片自动翻转的问题 - ufo - 飞颖站点
原图
 
解决上传iphone拍照的图片自动翻转的问题 - ufo - 飞颖站点
 缩略图
然后我排查image类的问题,怀疑可能是这里出bug了,结果并不是这样,断点调试后发现getimagesize这里获取的宽高和电脑显示的刚好是相反的,难道是php的gd组建的问题?

于是我又用js获取,和我php获取的是一样的,
解决上传iphone拍照的图片自动翻转的问题 - ufo - 飞颖站点
 
但是在文件属性里确实正常的
解决上传iphone拍照的图片自动翻转的问题 - ufo - 飞颖站点
然后java,go都有问题,可见这肯定是图片存储信息的问题了
然后百度搜索到“JS获取iphone图库中图片的宽高异常”http://segmentfault.com/q/1010000000501742 
果然是iphone获取图片的问题,并找到了解决方案
php代码
$exif = exif_read_data($picAddr);
$image = imagecreatefromjpeg($picAddr);
if($exif['Orientation'] == 3) {
$result = imagerotate($image, 180, 0);
imagejpeg($result, $picAddr, 100);
} elseif($exif['Orientation'] == 6) {
$result = imagerotate($image, -90, 0);
imagejpeg($result, $picAddr, 100);
} elseif($exif['Orientation'] == 8) {
$result = imagerotate($image, 90, 0);
imagejpeg($result, $picAddr, 100);
}
isset($result) && imagedestroy($result);
imagedestroy($image);
原来和图片 exif信息的 这个参数有关系 Orientation,原来 用相机拍摄出来的照片含有EXIF信息,UIImage的imageOrientation属性指的就是EXIF中的orientation信息。
如果我们忽略orientation信息,而直接对照片进行像素处理或者drawInRect等操作,得到的结果是翻转或者旋转90之后的样子。这是因为我们执行像素处理或者drawInRect等操作之后,imageOrientaion信息被删除了,imageOrientaion被重设为0,造成照片内容和imageOrientaion不匹配。
所以,在对照片进行处理之前,先将照片旋转到正确的方向,并且返回的imageOrientaion为0。
下面这个方法就是一个UIImage category中的方法,用它可以达到以上目的。
解决上传iphone拍照的图片自动翻转的问题 - ufo - 飞颖站点
 
 于是问题解决
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值