在iOS开发中,我们有时候可能会保存某些页面的数据,比如需要截屏之类的。在进行图片获取之后,如果图片过大,我们需要对图片进行压缩处理。实质上就是进行图片的重新绘制,重新生成一张图片。
代码如下
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
//可以压缩 或者 截屏
@interface ImageTool : NSObject
//返回单例的静态方法
+(ImageTool *)shareTool;
//返回特定尺寸的UImage , image参数为原图片,size为要设定的图片大小
-(UIImage*)resizeImageToSize:(CGSize)size
sizeOfImage:(UIImage*)image;
//在指定的视图内进行截屏操作,返回截屏后的图片
-(UIImage *)imageWithScreenContentsInView:(UIView *)view;
@end
#import "ImageTool.h"
#import <QuartzCore/QuartzCore.h>
@implementation ImageTool
static ImageTool *_shareImageTool =nil;
//返回单例的静态方法
+(ImageTool *)shareTool
{
//确保线程安全
@synchronized(self){
//确保只返回一个实例
if (_shareImageTool == nil) {
_shareImageTool = [[ImageTool alloc] init];
}
}
return _shareImageTool;
}
-(id)init
{
self = [super init];
if (self) {
}
return self;
}
//在指定的视图内进行截屏操作,返回截屏后的图片
-(UIImage *)imageWithScreenContentsInView:(UIView *)view
{
//根据屏幕大小,获取上下文
UIGraphicsBeginImageContext([[UIScreen mainScreen] bounds].size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
}
//重新生成图片的方法
-(UIImage*)resizeImageToSize:(CGSize)size
sizeOfImage:(UIImage*)image
{
UIGraphicsBeginImageContext(size);
//获取上下文内容
CGContextRef ctx= UIGraphicsGetCurrentContext();
CGContextTranslateCTM(ctx, 0.0, size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
//重绘image
CGContextDrawImage(ctx,CGRectMake(0.0f, 0.0f, size.width, size.height), image.CGImage);
//根据指定的size大小得到新的image
UIImage* scaled= UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaled;
}
@end