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

我有一个UIImagePickerController让用户从图像库中select一个图像,并通过didFinishPickingMediaWithInfo方法得到它的结果。

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

问题是,我不知道是否将其存储为PNG或JPEG。 我不能总是把它作为一个PNG存储,因为对于较大的照片,这是非常缓慢的(更不用说,那么我不得不分别处理存储图像的方向)。 我不能总是将它作为JPEG存储,因为在某些情况下,图像具有透明度,如果我这样做会丢失。

我检查了图像select器返回的信息字典中的UIImagePickerControllerMediaType键,不pipe是否select了PNG或JPEG,返回的是"image.public"

所以…

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

谢谢。

在字典中的关键UIImagePickerControllerReferenceURL会给你关于types的信息

(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所示

好的,所以我想清楚了。 这可能不适用于每种情况,但对我来说就足够了:

  CGImageAlphaInfo imgAlpha = CGImageGetAlphaInfo(theImage.CGImage); // Is this an image with transparency (ie do we need to save as PNG?) if ((imgAlpha == kCGImageAlphaNone) || (imgAlpha == kCGImageAlphaNoneSkipFirst) || (imgAlpha == kCGImageAlphaNoneSkipLast)) { // save as a JPEG } else { // save as a PNG } 

…当然,你需要记住你保存的图像types,给它适当的文件扩展名,并加载正确的一个…但基本上这照顾它。 具有透明度的图像将被保存为PNG,其他一切以JPEG格式保存。

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