繁体   English   中英

检测UIImage是PNG还是JPEG?

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

目前通过MonoTouch进行iPhone开发的第一步,我正在玩我从照片库中读取的UIImage

我想要实现的是获取图像的原始字节数组( byte[] )。

我知道MonoTouch中有UIImageJPEGRepresentationUIImagePNGRepresentation包装器。 我也知道如何使用它们。 我不知道的是:

我该如何决定调用这两个函数中的哪一个?

即如果原始图像是JPEG图像,我不希望将其作为PNG而是作为JPEG,反之亦然。

有没有办法做到这一点,或者我错过了一些观点?

一旦你有了UIImage ,它就可以使用UIImageJPEGRepresentationUIImagePNGRepresentation生成JPEG或PNG。 原始图像的格式仅在从其创建UIImage时才重要(决定加载它的CFImage提供程序)。

如果您的应用或算法对确保将其保存为原始格式很重要,我认为您必须在编写时保留该信息。 我仔细检查过,找不到任何宣传它来自哪种格式的东西。

您是要通过UIImageView更改图像还是图像在您的体验中保持不变? 如果它没有改变,你只需要UI来选择图像,你可以得到文件字节? 例如,如果您只是选择显示图像然后将它们上传到服务器或其他东西,那么UIImage只能用于查看和选择,如果您的数据结构记住它来自哪个文件,您可以将其取回磁盘和上传。 如果您在视图中更改文件,那么您或用户需要决定图像的输出(以及jpeg的质量)。

准备

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

@property (assign, nonatomic) DownloadImageType imageType;

检测

- (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");
    }

}

使用

if (self.imageType == DownloadImageTypePng) {

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

}

暂无
暂无

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

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