简体   繁体   中英

Get focal length of iOS devices

In Swift, is there an easy way to find the focal length of the currently using camera? I am working on an iOS application and I need to use the focal length (in pixels or in mm) of iOS cameras. I found documentation from Apple about the focal length, but there is no information about how to obtain it. Here are two places I have visited:

I have also checked this question but it doesn't seem to solve my problem. I know that the focal length can be calculated using the Field of View as follows:

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

but again, there are no guides in computing that quantity.

Could you please help? Thanks.

This function is for those who have the same problem like me before. Basically, we'll have to take a picture, then use the captured picture to detect the focal length:

    // 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)")
    }

I don't think there is any API function for the focal length of avfoundation. instead, you can get other info like lens aperture, dimensions, megapixel by calculating resolution, the field of view in degrees.

camera.lensAperture

camera.activeFormat.videoFieldOfView

camera.activeFormat.formatDescription
{
    let dimensions=CMVideoFormatDescriptionGetDimensions(formatdescription)
}

You can use MDLCamera class. First you have to import the class.

import ModelIO

Then use it like below

print("focal length: \(MDLCamera().focalLength)")

Btw you can put it in AppDelegate class.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM