一、转换方法介绍
目前系统提供的方法中,有两种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、内存耗费
方式一、内存消耗峰值为12.87MiB
方式二、内存消耗峰值为7.49MiB
2、转换后data相比原物理data大小
如图所示 第一种方法会导致图片物理大小变大很多
第二种方法会导致图片物理内存变小
时间
图片bitmap
方式一、方式二取出data 数据 在转换 为 image ,bitMap值不变
data image 互转 2次
相似
三、结论
综上所述,imageIO 原理的第二种方式 在性能 和结果上都要优于 第一种方式
四、项目应用后效果
参考链接:图片处理:Image I/O 学习笔记
https://www.jianshu.com/p/4dcd6e4bdbf0