iOS精选

UIImage 转 NSData调研

2019-09-26  本文已影响0人  愤怒小鸟飞呀飞

一、转换方法介绍

目前系统提供的方法中,有两种UIImage对象转NSData对象的方法
第一种

- (NSData *)rawData1:(UIImage *)image{
    NSData *data = UIImageJPEGRepresentation(image, 1.0);
    return data;
}

第二种

/**
 使用imageIO中的api生成data
 */
- (NSData *)rawData2:(UIImage *)image{
    NSDictionary *options = @{(__bridge NSString *)kCGImageSourceShouldCache : @NO,
                              (__bridge NSString *)kCGImageSourceShouldCacheImmediately : @NO
                              };
    NSMutableData *data = [NSMutableData data];
    CGImageDestinationRef destRef = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)data, kUTTypeJPEG, 1, (__bridge CFDictionaryRef)options);
    CGImageDestinationAddImage(destRef, image.CGImage, (__bridge CFDictionaryRef)options);
    CGImageDestinationFinalize(destRef);
    CFRelease(destRef);
    return data;
}

二、转换方法性能对比

1、内存耗费

image.png

方式一、内存消耗峰值为12.87MiB
方式二、内存消耗峰值为7.49MiB

2、转换后data相比原物理data大小

image.png

如图所示 第一种方法会导致图片物理大小变大很多
第二种方法会导致图片物理内存变小

时间
image.png
图片bitmap
 方式一、方式二取出data 数据 在转换 为 image ,bitMap值不变

data image 互转 2次

相似

三、结论

综上所述,imageIO 原理的第二种方式 在性能 和结果上都要优于 第一种方式

四、项目应用后效果

参考链接:图片处理:Image I/O 学习笔记
https://www.jianshu.com/p/4dcd6e4bdbf0

上一篇下一篇

猜你喜欢

热点阅读