/**
利用Image i/o
@param data 图片data
@param size UIImageView尺寸
@param scale 压缩比 0-1放大 拉伸 =1 原图,<1 压缩 //s饰演的结果是这个参数,并不能改变图片的大小
@param orientation 方向 //这个参数可以方便我们对图片作出旋转比如上-》下,镜像;
@return 缩略图
*/
-(UIImage *)seacalImageWithData:(NSData *)data withSize:(CGSize)size scale:(CGFloat)scale orientation:(UIImageOrientation)orientation{
CGFloat maxPixeSize = MAX(size.width, size.height);
//读取图像源
CGImageSourceRef sourceRef = CGImageSourceCreateWithData((__bridge CFDataRef)data, nil);
NSDictionary *options = @{(__bridge id)kCGImageSourceCreateThumbnailFromImageAlways:(__bridge id)kCFBooleanTrue,(__bridge id)kCGImageSourceThumbnailMaxPixelSize:[NSNumber numberWithFloat:maxPixeSize]};
//创建缩略图,根据字典
/*
options中的
kCGImageSourceThumbnailMaxPixelSize 指定缩略图的最大宽度和高度(以像素为单位)。如果此键未指定,缩略图的宽度和高度为不受限制,缩略图可能和图片本身一样大。如果指定,此键的值必须是CFNumberRef。* /
kCGImageSourceCreateThumbnailFromImageAlways *如果图像源文件中存在缩略图。缩略图将由完整图像创建,受kCGImageSourceThumbnailMaxPixelSize——如果没有最大像素大小指定,则缩略图将为完整图像的大小,可能不是你想要的。这个键的值必须是CFBooleanRef;这个键的默认值是kCFBooleanFalse。
*/
CGImageRef imageRef = CGImageSourceCreateThumbnailAtIndex(sourceRef, 0, (__bridge CFDictionaryRef)options);
UIImage *resultImage = [UIImage imageWithCGImage:imageRef scale:scale orientation:orientation];
return resultImage;
}
使用ImageI/O好处是:避免在改变图片大小的过程中产生临时的bitmap(栅格图),就能够在很大程度上减少内存的占有。