Objective c 使用UIImagePickerController获取图像——如何知道是保存PNG还是JPEG?

Objective c 使用UIImagePickerController获取图像——如何知道是保存PNG还是JPEG?,objective-c,ios,uiimage,uiimagepickercontroller,Objective C,Ios,Uiimage,Uiimagepickercontroller,我有一个UIImagePickerController让用户从图像库中选择图像,并通过didFinishPickingMediaWithInfo方法获得结果 我需要能够将生成的图像保存到磁盘(在应用程序的文档文件夹中),并在以后重新加载 问题是,我不知道是将其存储为PNG还是JPEG。我不能总是将其存储为PNG,因为对于较大的照片,它的速度会非常慢(更不用说,我必须单独存储图像方向)。我不能总是将其存储为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)采购订单信息

{
UIImagePickerControllerMediaType=“public.image”;
UIImagePickerControllerOriginalImage=“”;
UIImagePickerControllerReferenceURL=“资产-library://asset/asset.JPG?id=EFC44C3C-9C82-4669-924B-A2B9DE6F1F45&ext=JPG”;
}

在本例中,它是一个jpg,如ext=jpg所示,我最终使用了上面详细介绍的解决方案,但是这是一个极好的信息,本可以让我的任务更简单一些。谢谢
{
    UIImagePickerControllerMediaType = "public.image";
    UIImagePickerControllerOriginalImage = "<UIImage: 0x5cfd00>";
    UIImagePickerControllerReferenceURL = "assets-library://asset/asset.JPG?id=EFC44C3C-9C82-4669-924B-A2B9DE6F1F45&ext=JPG";
}