- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 AVCapturePhotoOutput
拍照的 View Controller 。我已经锁定了 View Controller 的可能方向,以便相机预览不会旋转:
override var supportedInterfaceOrientations : UIInterfaceOrientationMask {
return .portrait
}
问题 1:自从我改变了这一点后,当我拍照时,无论设备处于纵向还是横向模式,结果图像始终具有 UIImageOrientation == .right
。
问题2:然后我想使用UIImageJPEGRepresentation
将图像保存到文件系统,但是这个方法不包含相对于方向的exif信息(目前还可以,因为方向由于问题 1),目前是错误的。
我只想做许多其他应用程序正在做的事情:显示相机预览,当设备旋转时,该预览不会旋转,但拍摄的图像具有正确的方向,并且我可以保存它们。
有没有办法做到这一点而不必使用绘图方法旋转图像的数据?
最佳答案
问题是当锁定界面方向时:
override var supportedInterfaceOrientations : UIInterfaceOrientationMask {
return .portrait
}
预览层视频方向没有更新,这一点现在很明显。由于界面方向已锁定,因此我使用设备方向来告诉连接要使用哪个方向。这样缓冲区数据将具有正确的方向
@IBAction func shutterButtonDidClick(_ sender: Any) {
guard let output = self.cameraSession.outputs.compactMap({ $0 as? AVCapturePhotoOutput }).first, let photoOutputConnection = output.connection(with: .video), let delegate = self.videoCaptureDelegate else { return }
let deviceOrientation = UIDevice.current.orientation
//Important line
photoOutputConnection.videoOrientation = AVCaptureVideoOrientation(deviceOrientation: deviceOrientation)
let photoSettings = AVCapturePhotoSettings()
photoSettings.isHighResolutionPhotoEnabled = true
photoSettings.flashMode = output.supportedFlashModes.contains(.auto) ? .auto : .off
photoSettings.isAutoStillImageStabilizationEnabled =
output.isStillImageStabilizationSupported
output.capturePhoto(with: photoSettings, delegate: delegate)
}
extension AVCaptureVideoOrientation {
init(deviceOrientation: UIDeviceOrientation) {
switch deviceOrientation {
case .portrait: self = .portrait
case .portraitUpsideDown: self = .portraitUpsideDown
case .landscapeLeft: self = .landscapeRight
case .landscapeRight: self = .landscapeLeft
default: self = .portrait
}
}
}
关于ios - 仅支持竖屏界面时如何保存相机图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55424200/
如何从 Android-Native-Screen 打开 flutter 屏幕? 我开了一个 Android-Native-Screen 从现有我们 flutter 项目 . 所以,在 Android
有人知道如何使用 java 和 google chrome 最大化 selenium webdriver 窗口吗? 我已经尝试过一些命令,例如maximize () window (),但没有成功。
Redmi A65 智能电视今天正式开卖,4K 超高清大屏 + 立体声扬声器,到手价 2599 元。 IT之家了解到,Redmi A65 智能电视搭载了一块 65 英寸 4K 屏,支持 HDR
9 月 26 日消息小米电视大师「至尊纪念版」将在 9 月 29 日发布,根据今天小米集团大家电部总经理李肖爽放出的海报显示,小米电视大师至尊版有两款。 小米电视大师「至尊纪念版」是小米首款
华为手环 6 今日在海外正式发布,英文名 Band 6。这款产品是华为手环 4 的升级版,屏幕尺寸由 0.96 英寸升级为 1.47 英寸 AMOLED 屏,分辨率 194 x 368。该手环外形类
我是一名优秀的程序员,十分优秀!