6

UIImagePickerController让用户从图像库中选择图像,并通过该didFinishPickingMediaWithInfo方法获得结果。

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

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

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

所以...

有什么方法可以知道用户是否选择了 PNG?也许某种方法只是检查图像是否有任何透明度或其他东西?

谢谢。

4

2 回答 2

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。

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

于 2012-06-30T02:59:58.233 回答
2

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

(gdb) 邮政信息

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

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

于 2012-07-16T14:31:20.167 回答