使用UIImagePickerController捕获具有特定分辨率的照片

Dav*_*vid 10 iphone uiimagepickercontroller ios4 ios

我想拍摄A4纸的照片.重要的是,我希望文本可读,但我不希望像2592x1936像素或3264x2448像素这样的分辨率的图像太大.此外,我认为捕获后重新缩放照片需要额外的时间,所以我也想避免这种情况.

我们可以选择以下品质:

UIImagePickerControllerQualityTypeHigh = 0   
UIImagePickerControllerQualityTypeMedium          = 1  default value   
UIImagePickerControllerQualityTypeLow            = 2   
UIImagePickerControllerQualityType640x480         = 3,   
UIImagePickerControllerQualityTypeIFrame1280x720  = 4,   
UIImagePickerControllerQualityTypeIFrame960x540   = 5 
Run Code Online (Sandbox Code Playgroud)

如果我们使用的话AVFoundation,我们可以从这个漂亮的表中选择分辨率(标题为"捕捉静止图像").

但是有没有类似的表格UIImagePickerController,例如UIImagePickerControllerQualityTypeHigh在iPhone 3gs上等于1920x1080?

The*_*ter 18

UIImagepickerController质量用于视频录制(用于UIImagepickerController属性"videoQuality").

我想如果你想指定确切的照片分辨率应该是什么,你应该使用AV Foundation框架而不是UIImagepickerController.或者如你所说,之后转换图片.

之后调整大小(在此处找到):

//  ==============================================================
//  resizedImage
//  ==============================================================
// Return a scaled down copy of the image.  

UIImage* resizedImage(UIImage *inImage, CGRect thumbRect)
{
    CGImageRef          imageRef = [inImage CGImage];
    CGImageAlphaInfo    alphaInfo = CGImageGetAlphaInfo(imageRef);

    // There's a wierdness with kCGImageAlphaNone and CGBitmapContextCreate
    // see Supported Pixel Formats in the Quartz 2D Programming Guide
    // Creating a Bitmap Graphics Context section
    // only RGB 8 bit images with alpha of kCGImageAlphaNoneSkipFirst, kCGImageAlphaNoneSkipLast, kCGImageAlphaPremultipliedFirst,
    // and kCGImageAlphaPremultipliedLast, with a few other oddball image kinds are supported
    // The images on input here are likely to be png or jpeg files
    if (alphaInfo == kCGImageAlphaNone)
        alphaInfo = kCGImageAlphaNoneSkipLast;

    // Build a bitmap context that's the size of the thumbRect
    CGContextRef bitmap = CGBitmapContextCreate(
                NULL,
                thumbRect.size.width,       // width
                thumbRect.size.height,      // height
                CGImageGetBitsPerComponent(imageRef),   // really needs to always be 8
                4 * thumbRect.size.width,   // rowbytes
                CGImageGetColorSpace(imageRef),
                alphaInfo
        );

    // Draw into the context, this scales the image
    CGContextDrawImage(bitmap, thumbRect, imageRef);

    // Get an image from the context and a UIImage
    CGImageRef  ref = CGBitmapContextCreateImage(bitmap);
    UIImage*    result = [UIImage imageWithCGImage:ref];

    CGContextRelease(bitmap);   // ok if NULL
    CGImageRelease(ref);

    return result;
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


Wil*_*ker 5

总之一句:不.

没有"类似的表",因为你误解如何的喜欢UIImagePickerControllerQualityTypeHigh被使用UIImagePickerController.

如果你正在拍摄静止图像,UIImagePickerController你将获得相关设备的默认(即最高)质量 - 从8 MP到iPhone 4s到<1 MP与iPod touch或iPad 2).

但是,使用AVFoundation,您可以选择,这要归功于您所引用的会话预设.

但与这些AVFoundation会话预设不同,这些UIImagePickerController UIImagePickerControllerQualityType选项仅适用于动态视频,而不适用于静态图像捕捉.

因此,您可以选择使用AVFoundation来控制捕获大小,或者在保存之前重新调整全尺寸图像的大小; 但UIImagePickerController我不敢做你想做的事.