[英]How to Save Image to Application Folder from UIImagePickerController?
[英]Using UIImagePickerController to get image — how to know whether to save PNG or JPEG?
我有一个UIImagePickerController
让用户从图像库中选择一个图像,并通过didFinishPickingMediaWithInfo
方法获得结果。
我需要能够将生成的图像保存到磁盘(在应用程序的文档文件夹中),并在以后重新加载。
问题是我无法判断是将其存储为PNG还是JPEG。 我不能总是将它存储为PNG,因为对于较大的照片,它的速度很慢(更不用说我必须单独处理存储图像方向)。 我不能总是将它存储为JPEG,因为在某些情况下,图像具有透明度,如果我这样做会丢失。
我已经检查了图像选择器返回的信息字典中的UIImagePickerControllerMediaType
键,无论我选择了PNG还是JPEG,返回的是"image.public"
。
所以...
有没有办法知道用户是否选择了PNG? 也许只是检查图像是否有任何透明度的某种方法?
谢谢。
好的,所以我想通了。 这可能不适用于所有情况,但对我来说已经足够了:
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。
如果有人有更好的方法,我很乐意听到。 谢谢!
在字典中,键UIImagePickerControllerReferenceURL将为您提供有关该类型的信息
(gdb)po信息
{
UIImagePickerControllerMediaType = "public.image";
UIImagePickerControllerOriginalImage = "<UIImage: 0x5cfd00>";
UIImagePickerControllerReferenceURL = "assets-library://asset/asset.JPG?id=EFC44C3C-9C82-4669-924B-A2B9DE6F1F45&ext=JPG";
}
在这种情况下,它是一个jpg,如ext = JPG所示
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.