利用CoreQuartz缩放一张图片
转载请注明出处:http://www.cnblogs.com/idalink/articles/4202234.html
1、我们要做什么
iOS中,UIImage代表着图片对象,那么如何把一个图片缩小呢?这里,我们就使用CoreQuartz进行图片缩放。
2、原理
既然UIImage对象本身不提供图片缩放功能,那我们改怎么做呢?我们试想前面的Quartz基础,建设我们有一张白纸,如果我们把一副巨型图片绘制在这张白纸上,这个白纸不就是这个巨型图片的缩小版本吗?UIImage提供了图片绘制区间,这正帮助了我们?
由于是对一个图片进行操作,并不会给UIImage增加属性,那就用Objective-C提供的Category做这个事情把。
3、过程
创建工程,添加一幅图片,还是美女图片吧。然后为UIImage添加ScaleSize的类别。主工程中,为试图提供两个UIImageView,一个用以显示原始图片,另外一个用以显示缩放后的图片。
创建好的工程目录如下;
为UIImage(ScaledSize)添加缩放方法,代码如下:
#import <UIKit/UIKit.h> @interface UIImage (ScaleSize) - (UIImage *)scaleToSize:(CGSize)size; @end
#import "UIImage+ScaleSize.h" @implementation UIImage (ScaleSize) - (UIImage *)scaleToSize:(CGSize)size { //如此简单,创建一个图形绘制上下文,把图片绘制上去,然后从上下文中获取图片 UIGraphicsBeginImageContext(size); //CGContextRef context = UIGraphicsGetCurrentContext(); [self drawInRect:CGRectMake(0, 0, size.width, size.height)]; UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return result; } @end
最后别忘了主程序,主程序调用以上方法:
- (void)viewDidLoad { [super viewDidLoad]; UIImage *originImage = [UIImage imageNamed:@"test_image.jpg"]; self.originImageView.image = originImage; UIImage *scaledImage = [originImage scaleToSize:CGSizeMake(100, 200)]; self.scaledImageView.image = scaledImage; CGSize originSize = [originImage size]; NSData *originImageData = UIImagePNGRepresentation(originImage); CGSize scaledSize = [scaledImage size]; NSData *scaledImageData = UIImagePNGRepresentation(scaledImage); NSLog(@"原始图片:%f*%f , %lubyte", originSize.width, originSize.height, (unsigned long)[originImageData length]); NSLog(@"压缩图片:%f*%f , %lubyte", scaledSize.width, scaledSize.height, (unsigned long)[scaledImageData length]); }
4、结果
打工搞成,运行,效果如下:
NSLog日志如下:
大小缩小了十多倍,当然,清晰度也降低不少。