使用UIImagePickerController获取图像 - 如何知道是否保存PNG或JPEG?

时间:2012-06-29 23:58:43

标签: objective-c ios uiimage uiimagepickercontroller

我有UIImagePickerController让用户从图片库中挑选图片,并通过didFinishPickingMediaWithInfo方法获得结果。

我需要能够将生成的图像保存到磁盘(在应用程序的文档文件夹中),然后再重新加载。

问题在于我无法判断是将其存储为PNG还是JPEG。我不能总是将它存储为PNG,因为对于较大的照片,它的速度很慢(更不用说我必须单独处理存储图像方向)。我不能总是将它存储为JPEG,因为在某些情况下,图像具有透明度,如果我这样做会丢失。

我检查了图像选择器返回的信息词典中的UIImagePickerControllerMediaType键,无论我选择了PNG还是JPEG,返回的内容都是"image.public"

因此...

有没有办法知道用户是否选择了PNG?也许有些方法只是检查图像是否有任何透明度或什么?

感谢。

2 个答案:

答案 0 :(得分:6)

好的,所以我明白了。这可能不适用于所有情况,但对我来说已经足够了:

    CGImageAlphaInfo imgAlpha = CGImageGetAlphaInfo(theImage.CGImage);

    // Is this an image with transparency (i.e. do we need to save as PNG?)
    if ((imgAlpha == kCGImageAlphaNone) || (imgAlpha == kCGImageAlphaNoneSkipFirst) || (imgAlpha == kCGImageAlphaNoneSkipLast)) {
         // save as a JPEG
    } else {
         // save as a PNG
    }

...当然你需要记住你保存的图像类型,给它适当的文件扩展名,然后加载正确的图片......但基本上这样可以解决它。具有透明度的图像将保存为PNG,其他所有图像将保存为JPEG。

如果有人有更好的方法,我很乐意听到。谢谢!

答案 1 :(得分:2)

在字典中,键UIImagePickerControllerReferenceURL将为您提供有关类型的信息

(gdb)po info

{
    UIImagePickerControllerMediaType = "public.image";
    UIImagePickerControllerOriginalImage = "<UIImage: 0x5cfd00>";
    UIImagePickerControllerReferenceURL = "assets-library://asset/asset.JPG?id=EFC44C3C-9C82-4669-924B-A2B9DE6F1F45&ext=JPG";
}

在这种情况下,它是一个jpg,如ext = JPG

所示