【问题标题】:Get focal length of iOS devices获取iOS设备的焦距
【发布时间】:2017-10-21 23:50:26
【问题描述】:

在 Swift 中,有没有一种简单的方法可以找到当前使用的相机的焦距? 我正在开发一个 iOS 应用程序,我需要使用 iOS 相机的焦距(以像素或毫米为单位)。我从 Apple 找到了有关焦距的文档,但没有关于如何获取它的信息。以下是我去过的两个地方:

我也检查了this question,但它似乎并没有解决我的问题。 我知道焦距可以使用视场计算如下:

focal_length_pixels = (image_diagonal_pixels/2)/tan(FOV/2)

但同样,计算该数量没有指南。

你能帮忙吗? 谢谢。

【问题讨论】:

标签: ios iphone swift ios-camera


【解决方案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 也是如此。似乎只返回虚拟默认值
      猜你喜欢
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多