美文网首页iOS点点滴滴iOS 开发每天分享优质文章
iOS模仿系统相机拍照你不曾注意过的细节

iOS模仿系统相机拍照你不曾注意过的细节

作者: 苍龙_2945 | 来源:发表于2018-07-07 09:59 被阅读4次

    需求

    由于我们APP集成了有道翻译的SDK,需要将拍出来的图片翻译成对应的语言,但是有道的SDK目前还做的不是很完善(比如:照片倾斜的时候,返回的角度不是很对,有道的技术说下个版本可能会更新)。于是产品要求拍照页面做成跟系统相机类似,当用户横屏拍摄的时候,需要客户端自己将图片纠正回来,倒着拍的时候亦然。

    自定义相机功能就不多说了,网上有大量的优秀文章,这里随便从网上找了一个,需要的可以参考下

    基础知识

    首先我们需要知道每一个UIImage对象,都有一个imageOrientation属性,里面保存着方向信息:

    根据这个属性信息,我们便可以对图像进行相应的旋转,将图片转到正确的方向,如何旋转??有两种解决方案:

    第一种:给UIImage添加Category

    在这里我还是要推荐下我自己建的iOS开发学习群:680565220,群里都是学ios开发的,如果你正在学习ios ,小编欢迎你加入,今天分享的这个案例已经上传到群文件,大家都是软件开发党,不定期分享干货(只有iOS软件开发相关的),包括我自己整理的一份2018最新的iOS进阶资料和高级开发教程

    第二种:利用drawInRect方法将图像画到画布上

    通过上面两种方式转换之后的UIImage对象,其imageOrientation属性,都会被修改成UIImageOrientationUp,这样将图片传到后台,或者导出相册的时候,就不会出现照片旋转90度的问题。

    但是有时候我们希望图片该旋转的时候,按照我们的意愿旋转(比如横评拍摄的时候),竖直拍摄的时候,图像正常显示,这时候我们就不能直接用上面的方法来判断了。仔细观察系统相机的拍摄,我发现除了竖直拍摄以外,别的情况下拍摄,图片都会自动旋转,这个时候就需要我们利用iPhone手机自带的硬件传感器对方向进行判断,以达到我们想要的结果,这里主要用到加速仪

    加速仪(类型:CMAcceleration)

    加速仪可以检测三维空间中的加速度 ,坐标对应如下:

    例如:当垂直手持手机且顶部向上,Y坐标上回收到 -1G的加速度,(0,-1,0),当手机头部朝下,得到的各个坐标为:(0,1,0)

    主要代码如下:

    获取到方向信息,下面就可以对图片进行对应的处理了,主要用到了下面的这个方法:

    该方法的作用是:

    Creates and returns an image object with the specified scale and orientation factors.

    创建并返回具有指定比例和方向特征的image对象。

    最后对拍摄的图片进行处理:

    最终效果图

    总结

    功能实现起来其实并不难,当时和同事纠结的地方在于,到底是采用支持横竖屏还是采用加速度传感器上面,最后经过分析系统相机,我还是采用了利用传感器做判断,期间也是查阅了很多的技术文章,无意中发现了一篇真心值得仔细阅读的关于图片解压缩的文章。最后,再次对最近的松懈进行反思,继续撸起袖子,加油干!!!

    相关文章

      网友评论

        本文标题:iOS模仿系统相机拍照你不曾注意过的细节

        本文链接:https://www.haomeiwen.com/subject/befvuftx.html