iOS拍摄方向与图片方向关系

2019-07-11  本文已影响0人  水水兔

<font color = 'gray'>2018-11-08 编辑 :yzl </font>

方式 时间 人物
制定 20181108 杨志灵
修改 20181109 杨志灵

前言

在引用第三方库LLSimplCamera时,发现一个问题就是,界面不支持横竖屏,当横屏进入到拍摄界面时,拍摄到的图片方向不对,为解决此问题,需求修改源码,在此之前得了解显示层设置的方向与设备方向到底是如何的一种关系时,才能让显示的图片与我们实际看的图片一致;还有输入出流程的方向与设备方向到底是如何一种关系时,才能得到正确的图片。本文是通过数据统计,看出他们的关系,并且得出结论。

显示层与拍摄方向的关系

设备不支持旋转

一、 设备只支持竖屏

1.显示层方向与拍摄方向关系
captureVideoPreviewLayer.connection.videoOrientation 拍摄时手机方向 显示层图片显示方向
AVCaptureVideoOrientationLandscapeRight up left
right left
left left
AVCaptureVideoOrientationPortrait up up
right up
left up
AVCaptureVideoOrientationLandscapeLeft up right
right right
left right

结论当屏只支持竖屏时,只有显示层方向为AVCaptureVideoOrientationPortrait(与状态栏方向一致)时,显示的图片才正确。

2.输出流方向与图片方向关系
AVCaptureStillImageOutput的connection.videoOrientation 拍摄时手机方向 图片实际方向 UIImage属性imageOrientation值
<font color=red>AVCaptureVideoOrientationLandscapeRight <font> up left 0
<font color=red> right<font> <font color=red>up </font> <font color=red>0 <font>
left down 0
<font color=red>AVCaptureVideoOrientationPortrait</font> <font color=red>up</font> <font color=red>left</font> <font color=red>3</font>
right up 3
left down 3
<font color=red>AVCaptureVideoOrientationLandscapeLeft</font> up left 1
right up 1
<font color=red>left</font> <font color=red>down </font> <font color=red>1</font>

只有图片实际方向与UIImage属性imageOrientation值方向一致时,通过方向纠正,才能得到正确图片,所以上面标红的数据才是我们想要的。所以从上面数据得出结论只有拍摄方向(这里我们可以认为是设备方向)与输入流设置的方向一致时,才能得到正确的图片方向(这里的正确指的是与我们肉眼实际看到的图片一致)。

二、设备只支持UIDeviceOrientationLandscapeRight

1.显示层方向与拍摄方向关系
captureVideoPreviewLayer.connection.videoOrientation 拍摄时手机方向 显示层图片显示方向
AVCaptureVideoOrientationLandscapeRight up up
right up
left up
AVCaptureVideoOrientationPortrait up right
right right
left right
AVCaptureVideoOrientationLandscapeLeft up down
right down
left down

结论当屏只支持UIDeviceOrientationLandscapeRight时,只有显示层方向为AVCaptureVideoOrientationLandscapeRight(与状态栏方向一致)时,显示的图片才正确。

2.输出流方向与图片方向关系
AVCaptureStillImageOutput的connection.videoOrientation 拍摄时手机方向 图片实际方向 UIImage属性imageOrientation值
AVCaptureVideoOrientationLandscapeRight up left 0
right up 0
left down 0
AVCaptureVideoOrientationPortrait up left 3
right up 3
left down 3
AVCaptureVideoOrientationLandscapeLeft up left 1
right up 1
left down 1

同样得出结论:只有拍摄方向(这里我们可以认为是设备方向)与输入流设置的方向一致时,才能得到正确的图片方向(这里的正确指的是与我们肉眼实际看到的图片一致)

三、 设备只支持UIDeviceOrientationLandscapeLeft

1.显示层方向与拍摄方向关系
captureVideoPreviewLayer.connection.videoOrientation 拍摄时手机方向 显示层图片显示方向
AVCaptureVideoOrientationLandscapeRight up down
right down
left down
AVCaptureVideoOrientationPortrait up left
right left
left left
AVCaptureVideoOrientationLandscapeLeft up up
right up
left up

结论当屏只支持UIDeviceOrientationLandscapeLeft时,只有显示层方向为AVCaptureVideoOrientationLandscapeLeft(与状态栏方向一致)时,显示的图片才正确。

2.输出流方向与图片方向关系
AVCaptureStillImageOutput的connection.videoOrientation 拍摄时手机方向 图片实际方向 UIImage属性imageOrientation值
AVCaptureVideoOrientationLandscapeRight up left 0
right up 0
left down 0
AVCaptureVideoOrientationPortrait up left 3
right up 3
left down 3
AVCaptureVideoOrientationLandscapeLeft up left 1
right up 1
left down 1

同样得出结论:只有拍摄方向(这里我们可以认为是设备方向)与输入流设置的方向一致时,才能得到正确的图片方向(这里的正确指的是与我们肉眼实际看到的图片一致)。

四、 设备只支持UIDeviceOrientationDown

由于数据统计整理起来太麻烦,在此偷个懒吧,关于此方向的数据就不整理了,得出的结论和上面的一样。

五、 结论

结束语

支持屏幕旋转的同理,在此不在做数据整理。只要每次在屏幕旋转时,按以上的结论重新设置显示层和输出流的方向即可。

I

上一篇 下一篇

猜你喜欢

热点阅读