简体   繁体   English

检测UIImage是PNG还是JPEG?

[英]Detect whether an UIImage is PNG or JPEG?

Currently doing my first steps with iPhone development through MonoTouch, I am playing with an UIImage that I read from the photo library. 目前通过MonoTouch进行iPhone开发的第一步,我正在玩我从照片库中读取的UIImage

What I want to achieve is to get the raw byte array ( byte[] ) of the image. 我想要实现的是获取图像的原始字节数组( byte[] )。

I know that there are the UIImageJPEGRepresentation and UIImagePNGRepresentation wrappers in MonoTouch. 我知道MonoTouch中有UIImageJPEGRepresentationUIImagePNGRepresentation包装器。 I also know how to use them. 我也知道如何使用它们。 What I don't know is: 我不知道的是:

How do I decide which of these two functions to call? 我该如何决定调用这两个函数中的哪一个?

Ie if the original image is a JPEG image, I do not want to get it as an PNG but also as a JPEG, and vice versa. 即如果原始图像是JPEG图像,我不希望将其作为PNG而是作为JPEG,反之亦然。

Is there a way to do this, or am I missing some points on this? 有没有办法做到这一点,或者我错过了一些观点?

Once you have a UIImage , it is capable of producing either a JPEG or PNG using UIImageJPEGRepresentation or UIImagePNGRepresentation . 一旦你有了UIImage ,它就可以使用UIImageJPEGRepresentationUIImagePNGRepresentation生成JPEG或PNG。 The format of the original image is only important when the UIImage is being created from it (decides which CFImage provider to load it). 原始图像的格式仅在从其创建UIImage时才重要(决定加载它的CFImage提供程序)。

If it's important to your app or algorithm to ensure you save it as the original format, I think you have to maintain that info to use when your writing it. 如果您的应用或算法对确保将其保存为原始格式很重要,我认为您必须在编写时保留该信息。 I double checked and couldn't find anything that advertised what format it came from. 我仔细检查过,找不到任何宣传它来自哪种格式的东西。

Are you going to change the image through UIImageView or does the image stay unchanged in your experience? 您是要通过UIImageView更改图像还是图像在您的体验中保持不变? If it's not changed and you just need the UI to select the image, could you get to file bytes? 如果它没有改变,你只需要UI来选择图像,你可以得到文件字节? For example, if you showed the images just to select and then you upload them to a server or something, the UIImage could only be for viewing and selecting and if your data structure remembers which file it came from, you could get the bits back off disk and upload. 例如,如果您只是选择显示图像然后将它们上传到服务器或其他东西,那么UIImage只能用于查看和选择,如果您的数据结构记住它来自哪个文件,您可以将其取回磁盘和上传。 If your changing the file in the view, then you or the user needs to decide the output (and if jpeg the quality) of the image. 如果您在视图中更改文件,那么您或用户需要决定图像的输出(以及jpeg的质量)。

PREPARE 准备

typedef NS_ENUM(NSInteger, DownloadImageType) {
    DownloadImageTypePng,
    DownloadImageTypeJpg
};

@property (assign, nonatomic) DownloadImageType imageType;

DETECT 检测

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    NSString *compareString = [[info objectForKey:UIImagePickerControllerReferenceURL] absoluteString];
    NSRange pngRange = [compareString rangeOfString:@"PNG" options:NSBackwardsSearch];
    if (pngRange.location != NSNotFound) {
        compareString = [compareString substringFromIndex:pngRange.location];
        self.imageType = DownloadImageTypePng;
        NSLog(@"%@", compareString);
    } else {
        NSLog(@"Not PNG");
    }

    NSRange jpgRange = [compareString rangeOfString:@"JPG" options:NSBackwardsSearch];
    if (jpgRange.location != NSNotFound) {
        compareString = [compareString substringFromIndex:jpgRange.location];
        self.imageType = DownloadImageTypeJpg;
        NSLog(@"%@", compareString);
    } else {
        NSLog(@"Not JPG");
    }

}

USE 使用

if (self.imageType == DownloadImageTypePng) {

} else if (self.imageType == DownloadImageTypeJpg) {

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM