找到设备的相机分辨率iOS的方法

tha*_*bun 17 iphone avfoundation ios avcapture avcapturesession

什么是使用设置找到要捕获的图像分辨率的最佳方法AVCaptureSessionPresetPhoto.
我想在捕获图像之前找到分辨率.

Rom*_*pko 103

以下是支持iOS 9的所有经过测试的相机sessionPreset的设备表

+-----------------------+--------------+---------------------------------+---------------+
|        Device         |    Camera    |     AVCaptureSessionPreset      |  Resolution   |
+-----------------------+--------------+---------------------------------+---------------+
| iPhone 4S             | FRONT        |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 640x480       |
|                       |              | AVCaptureSessionPresetHigh      | 640x480       |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | not supported |
|                       |              | AVCaptureSessionPreset1920x1080 | not supported |
|                       | BACK         |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 3264x2448     |
|                       |              | AVCaptureSessionPresetHigh      | 1920x1080     |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | 1920x1080     |
+-----------------------+--------------+---------------------------------+---------------+
| iPhone 5/5C/5S/6/6+   |              |                                 |               |
|                       | FRONT        |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 1280x960      |
|                       |              | AVCaptureSessionPresetHigh      | 1280x720      |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | not supported |
|                       | BACK         |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 3264x2448     |
|                       |              | AVCaptureSessionPresetHigh      | 1920x1080     |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | 1920x1080     |
+-----------------------+--------------+---------------------------------+---------------+
| iPhone 6S/6S          |              |                                 |               |
|                       | FRONT camera |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 1280x960      |
|                       |              | AVCaptureSessionPresetHigh      | 1280x720      |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | not supported |
|                       | BACK camera  |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 4032x3024     |
|                       |              | AVCaptureSessionPresetHigh      | 1920x1080     |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | 1920x1080     |
+-----------------------+--------------+---------------------------------+---------------+
| iPad 2                |              |                                 |               |
|                       | FRONT        |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 640x480       |
|                       |              | AVCaptureSessionPresetHigh      | 640x480       |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | not supported |
|                       |              | AVCaptureSessionPreset1920x1080 | not supported |
|                       | BACK         |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 960x720       |
|                       |              | AVCaptureSessionPresetHigh      | 1280x720      |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | not supported |
+-----------------------+--------------+---------------------------------+---------------+
| iPad 3                |              |                                 |               |
|                       | FRONT        |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 640x480       |
|                       |              | AVCaptureSessionPresetHigh      | 640x480       |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | not supported |
|                       |              | AVCaptureSessionPreset1920x1080 | not supported |
|                       | BACK         |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 2592x1936     |
|                       |              | AVCaptureSessionPresetHigh      | 1920x1080     |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | 1920x1080     |
+-----------------------+--------------+---------------------------------+---------------+
| iPad 4/Air            |              |                                 |               |
| iPad Mini 1/2/3       |              |                                 |               |
| iPod 5G               |              |                                 |               |
|                       | FRONT        |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 1280x960      |
|                       |              | AVCaptureSessionPresetHigh      | 1280x720      |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | not supported |
|                       | BACK         |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 2592x1936     |
|                       |              | AVCaptureSessionPresetHigh      | 1920x1080     |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | 1920x1080     |
+-----------------------+--------------+---------------------------------+---------------+
| iPad Air 2            |              |                                 |               |
| iPad Mini 4           |              |                                 |               |
| iPad Pro              |              |                                 |               |
|                       | FRONT        |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 1280x960      |
|                       |              | AVCaptureSessionPresetHigh      | 1280x720      |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | not supported |
|                       | BACK         |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 3264x2448     |
|                       |              | AVCaptureSessionPresetHigh      | 1920x1080     |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | 1920x1080     |
+-----------------------+--------------+---------------------------------+---------------+
| iPod Touch 5          |              |                                 |               |
|                       | FRONT        |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 1280x960      |
|                       |              | AVCaptureSessionPresetHigh      | 1280x720      |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | not supported |
|                       | BACK         |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 2592x1936     |
|                       |              | AVCaptureSessionPresetHigh      | 1920x1080     |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | 1920x1080     |
+-----------------------+--------------+---------------------------------+---------------+
| iPod Touch 6          |              |                                 |               |
|                       | FRONT        |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 1280x960      |
|                       |              | AVCaptureSessionPresetHigh      | 1280x720      |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | not supported |
|                       | BACK         |                                 |               |
|                       |              | AVCaptureSessionPresetPhoto     | 3264x2448     |
|                       |              | AVCaptureSessionPresetHigh      | 1920x1080     |
|                       |              | AVCaptureSessionPresetMedium    | 480x360       |
|                       |              | AVCaptureSessionPresetLow       | 192x144       |
|                       |              | AVCaptureSessionPreset640x480   | 640x480       |
|                       |              | AVCaptureSessionPreset1280x720  | 1280x720      |
|                       |              | AVCaptureSessionPreset1920x1080 | 1920x1080     |
+-----------------------+--------------+---------------------------------+---------------+
Run Code Online (Sandbox Code Playgroud)

+ (NSDictionary*) cameraResolutions {
    NSString* deviceModel = [self deviceModel];

    // iPhone 4S
    if ([deviceModel isEqualToString:@"iPhone4,1"]) {

        NSString* lFrontCam = @"640x480,480x360,192x144";
        NSString* lBackCam = @"3264x2448,1920x1080,1280x720,640x480,480x360,192x144";
        NSDictionary* lCamResolutions = @{@"front":lFrontCam,
                                          @"back":lBackCam};
        return lCamResolutions;
    }
    // iPhone 5/5C/5S/6/6+/iPod 6
    else if ([deviceModel isEqualToString:@"iPhone5,1"]
             || [deviceModel isEqualToString:@"iPhone5,2"]
             || [deviceModel isEqualToString:@"iPhone5,3"]
             || [deviceModel isEqualToString:@"iPhone5,4"]
             || [deviceModel isEqualToString:@"iPhone6,1"]
             || [deviceModel isEqualToString:@"iPhone6,2"]
             || [deviceModel isEqualToString:@"iPhone7,1"]
             || [deviceModel isEqualToString:@"iPhone7,2"]
             || [deviceModel isEqualToString:@"iPod7,1"]) {

        NSString* lFrontCam = @"1280x960,1280x720,640x480,480x360,192x144";
        NSString* lBackCam = @"3264x2448,1920x1080,1280x720,640x480,480x360,192x144";
        NSDictionary* lCamResolutions = @{@"front":lFrontCam,
                                          @"back":lBackCam};
        return lCamResolutions;
    }
    // iPhone 6S/6S+
    else if ([deviceModel isEqualToString:@"iPhone8,1"]
             || [deviceModel isEqualToString:@"iPhone8,2"]) {
        NSString* lFrontCam = @"1280x960,1280x720,640x480,480x360,192x144";
        NSString* lBackCam = @"4032x3024,1920x1080,1280x720,640x480,480x360,192x144";
        NSDictionary* lCamResolutions = @{@"front":lFrontCam,
                                          @"back":lBackCam};
        return lCamResolutions;
    }
    // iPad 2
    else if ([deviceModel isEqualToString:@"iPad2,1"]
             || [deviceModel isEqualToString:@"iPad2,2"]
             || [deviceModel isEqualToString:@"iPad2,3"]
             || [deviceModel isEqualToString:@"iPad2,4"]) {


        NSString* lFrontCam = @"640x480,480x360,192x144";
        NSString* lBackCam = @"1280x720,960x720,480x360,192x144,640x480";
        NSDictionary* lCamResolutions = @{@"front":lFrontCam,
                                          @"back":lBackCam};
        return lCamResolutions;
    }
    // iPad 3
    else if ([deviceModel isEqualToString:@"iPad3,1"]
             || [deviceModel isEqualToString:@"iPad3,2"]
             || [deviceModel isEqualToString:@"iPad3,3"]) {


        NSString* lFrontCam = @"640x480,480x360,192x144";
        NSString* lBackCam = @"2592x1936,1920x1080,1280x720,640x480,480x360,192x144";
        NSDictionary* lCamResolutions = @{@"front":lFrontCam,
                                          @"back":lBackCam};
        return lCamResolutions;
    }
    // iPad 4/Air/Mini/Mini 2/Mini 3/iPod 5G
    else if ([deviceModel isEqualToString:@"iPad3,4"]
             || [deviceModel isEqualToString:@"iPad3,5"]
             || [deviceModel isEqualToString:@"iPad3,6"]
             || [deviceModel isEqualToString:@"iPad4,1"]
             || [deviceModel isEqualToString:@"iPad4,2"]
             || [deviceModel isEqualToString:@"iPad4,3"]
             || [deviceModel isEqualToString:@"iPad4,4"]
             || [deviceModel isEqualToString:@"iPad4,5"]
             || [deviceModel isEqualToString:@"iPad4,6"]
             || [deviceModel isEqualToString:@"iPad4,7"]
             || [deviceModel isEqualToString:@"iPad4,8"]
             || [deviceModel isEqualToString:@"iPod5,1"]) {

        NSString* lFrontCam = @"1280x960,1280x720,640x480,480x360,192x144";
        NSString* lBackCam = @"2592x1936,1920x1080,1280x720,640x480,480x360,192x144";
        NSDictionary* lCamResolutions = @{@"front":lFrontCam,
                                           @"back":lBackCam};
        return lCamResolutions;
    }
    // iPad Air 2/Mini 4/Pro
    else if ([deviceModel isEqualToString:@"iPad5,3"]
             || [deviceModel isEqualToString:@"iPad5,4"]) {
        NSString* lFrontCam = @"1280x960,1280x720,640x480,480x360,192x144";
        NSString* lBackCam = @"3264x2448,1920x1080,1280x720,640x480,480x360,192x144";
        NSDictionary* lCamResolutions = @{@"front":lFrontCam,
                                          @"back":lBackCam};
        return lCamResolutions;
    }
    return nil;
}
Run Code Online (Sandbox Code Playgroud)

  • 我很感激努力;) (8认同)
  • 嗨,罗马,出色的工作。你能告诉我你如何得到所有这些数据吗?实际上,我需要用于新iPhone(SE,7、7 +,8、8 +,X)的数据。如果您可以为新iPhone更新此列表,我将不胜感激。谢谢 (2认同)
  • 嗨罗曼,你能提供一个链接或更多关于你的来源的信息吗? (2认同)

Cra*_*lot 14

使用下面的函数,您可以以编程方式从activeFormat捕获开始之前获得分辨率,但不是在添加输入和输出之前:https: //developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVCaptureDevice_Class/index.html# // apple_ref/OCC/instp/AVCaptureDevice/activeFormat

private func getCaptureResolution() -> CGSize {
    // Define default resolution
    var resolution = CGSize(width: 0, height: 0)

    // Get cur video device
    let curVideoDevice = useBackCamera ? backCameraDevice : frontCameraDevice

    // Set if video portrait orientation
    let portraitOrientation = orientation == .Portrait || orientation == .PortraitUpsideDown

    // Get video dimensions
    if let formatDescription = curVideoDevice?.activeFormat.formatDescription {
        let dimensions = CMVideoFormatDescriptionGetDimensions(formatDescription)
        resolution = CGSize(width: CGFloat(dimensions.width), height: CGFloat(dimensions.height))
        if portraitOrientation {
            resolution = CGSize(width: resolution.height, height: resolution.width)
        }
    }

    // Return resolution
    return resolution
}
Run Code Online (Sandbox Code Playgroud)


Cou*_*per 8

捕获图像之前,可能无法以编程方式直接获取相机分辨率.

Apple提供了各种设备和预设的表格:

捕捉静止图像