获取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设备的焦距的主要内容,如果未能解决你的问题,请参考以下文章

UDID是啥 如何获取iOS设备UDID

如何通过蓝牙获取附近的ios设备信息

获取ios设备信息

获取iOS设备的型号

如何获取ios 设备名字 model

iOS ---------- 获取设备的各种信息