最近在接入一个拍照翻译的api时,发现用自带相机拍摄的照片传上去时返回的文字的rect对不上,而去相册里把照片截屏再上传之又是正常的,在排查了一段时间之后终于在输出照片的大小时发现了端倪
在用上面的方法输出的高度和宽度时,发现用相机拍摄的照片输出的宽度居然大于高度,可UIimageView里显示的照片明显是高度比宽度大一些的,于是上网搜索有关资料,果不其然:
最坑的地方在于,UIimageView在使用照片的时候会自动旋转回来,这给人的误导就是如果不通过 CGImageGetHeight 的方式输出照片的宽高,根本无法发现这个问题!因为你看到屏幕上显示的确实是正常的
知道了原因,解决起来就简单了,给UIImage写一个分类解决这个问题:
使用时,直接调用 - (UIImage )fixOrientation 方法即可
如果发到群里的照片是横着的,可以使用编辑软件将其旋转90度,让它变成竖着的。具体 *** 作步骤如下:首先,打开编辑软件,然后打开横着的照片;接着,在软件的工具栏中,找到旋转按钮,点击这个按钮,照片就会旋转90度,变成竖着的;最后,保存照片,将其发送到群里即可。可先将此照片保存至桌面,再将微博上的此照片删除。在电脑桌面,打开此照片,一般电脑中使用的默认工具,在打开的工具页面下方,有顺时针旋转和逆时针旋转,可根据照片的反转情况来讲照片转正,转正后照片就会自动保存,下次打开时就不会出现照反的情况。
最后,再将修改好的照片上传至新浪微博即可。Iphone默认正平拍照为正确的方向,竖屏拍照会携带逆时针旋转90的信息,也就是Orientation (rotation)
可参考下图理解
资料: >ios上传到服务器,渲染到页面上之后会旋转90度,android显示正常。
ios相机加入了方向传感器,能够记录相机拍摄的方向,这些信息保存在照片中,当相机浏览这些照片的时候,相机可以根据照片中的方向信息,结合此时相机的方向,对照片进行旋转
iOS拍摄的提供了EXIF(可交换图像文件格式:Exchangeable image file format)信息,Orientation 旋转信息等存储在其中。
判断是否有旋转:
上传到七牛云上的路径 拼接上 + ''imageInfo"
如果有旋转返回数据
{"size":2645332,"format":"jpeg","width":4032,"height":3024,"colorModel":"ycbcr","orientation":"Right-top"}
没有旋转返回数据
{"size":371939,"format":"png","width":375,"height":1078,"colorModel":"rgba"}
很显然: 有orientation说明有旋转问题
让不旋转:路径后面拼接 + "imageMogr2/auto-orient"(可以不判断是否有旋转信息,直接将所有的拼接上,简单粗暴)
读取照片的 Exif 信息,判断 Orientation 的值,然后将进行相应的旋转
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)