利用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日志如下:

大小缩小了十多倍,当然,清晰度也降低不少。

posted @ 2015-01-04 20:44  Dalink  阅读(345)  评论(0编辑  收藏  举报