我有一个UIImagePickerController
让用户从图像库中选择图像,并通过didFinishPickingMediaWithInfo
method.
我需要能够将生成的图像保存到磁盘(在应用程序的文档文件夹中),并稍后重新加载。
问题是我无法判断是将其存储为 PNG 还是 JPEG。我不能总是将其存储为 PNG,因为对于较大的照片来说,它的速度非常慢(更不用说我必须单独存储图像方向)。我不能总是将其存储为 JPEG,因为在某些情况下图像具有透明度,如果我这样做,透明度就会丢失。
我已经检查过UIImagePickerControllerMediaType
在图像选择器返回的信息字典中键入,无论我选择的是PNG还是JPEG,返回的是"image.public"
.
So...
有没有办法知道用户是否选择了PNG?也许有某种方法可以检查图像是否具有透明度或其他什么?
Thanks.
好吧,所以我想通了。这可能不适用于所有场景,但对我来说已经足够了:
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。
如果有人有更好的方法,我很想听听。谢谢!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)