获取iOS设备的焦距
Posted
技术标签:
【中文标题】获取iOS设备的焦距【英文标题】:Get focal length of iOS devices 【发布时间】:2017-10-21 23:50:26 【问题描述】:在 Swift 中,有没有一种简单的方法可以找到当前使用的相机的焦距? 我正在开发一个 ios 应用程序,我需要使用 iOS 相机的焦距(以像素或毫米为单位)。我从 Apple 找到了有关焦距的文档,但没有关于如何获取它的信息。以下是我去过的两个地方:
mdlcamera coreimage我也检查了this question,但它似乎并没有解决我的问题。 我知道焦距可以使用视场计算如下:
focal_length_pixels = (image_diagonal_pixels/2)/tan(FOV/2)
但同样,计算该数量没有指南。
你能帮忙吗? 谢谢。
【问题讨论】:
我希望给出的链接对你有帮助***.com/questions/13190932/… 您不能使用 'image_diagonal_pixels' 进行计算,因为 videoFieldOfView 不是对角线(它代表水平)(请参阅developer.apple.com/documentation/avfoundation/…) 【参考方案1】:这个功能是为那些和我一样有同样问题的人准备的。基本上,我们必须拍一张照片,然后使用拍摄的照片来检测焦距:
// delegate method for the image picker
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
let metadata = info[UIImagePickerControllerMediaMetadata] as? NSDictionary
let exifdata = metadata!["Exif"] as! NSDictionary
// focal length
let focalLength = exifdata["FocalLength"] as! Double
print("Focal length \(focalLength)")
【讨论】:
【参考方案2】:我认为avfoundation的焦距没有任何API函数。 相反,您可以通过计算分辨率来获取其他信息,例如镜头光圈、尺寸、百万像素、以度为单位的视野。
camera.lensAperture
camera.activeFormat.videoFieldOfView
camera.activeFormat.formatDescription
let dimensions=CMVideoFormatDescriptionGetDimensions(formatdescription)
【讨论】:
【参考方案3】:您可以使用 MDLCamera 类。首先你必须导入类。
import ModelIO
然后像下面这样使用它
print("focal length: \(MDLCamera().focalLength)")
顺便说一句,你可以把它放在 AppDelegate 类中。
【讨论】:
当我在 iPhone5 中调用 MDLCamera().focalLength 时,它返回 23.5513268。这与其规范不同。 并且随着目标模拟器的变化, MDLCamera().focalLength 总是返回相同的值。 sensorAspect、fieldOfView 和 sensorVerticalAperture 也是如此。似乎只返回虚拟默认值以上是关于获取iOS设备的焦距的主要内容,如果未能解决你的问题,请参考以下文章