UIImage压缩和缩放

节省大量内存,重绘缩略图;

#define K_contentsOfFile(fileName,fileType) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fileName ofType:fileType]]

3种方法,分别是调整、居中、填充方式。

[color=red]1、等比例缩放。需要根据图像的长宽比在其四周留出一些额外区域,用透明像素为图像消关[/color]。
+ (CGSize) fitSize: (CGSize)thisSize inSize: (CGSize) aSize
{
CGFloat scale;
CGSize newsize = thisSize;

if (newsize.height && (newsize.height > aSize.height))
{
scale = aSize.height / newsize.height;
newsize.width *= scale;
newsize.height *= scale;
}

if (newsize.width && (newsize.width >= aSize.width))
{
scale = aSize.width / newsize.width;
newsize.width *= scale;
newsize.height *= scale;
}

return newsize;
}
[color=red]2、抽取部分图像来匹配可用空间。并裁剪掉落在像素区外的任何元素。[/color]
//返回调整的缩略图
+ (UIImage *) image: (UIImage *) image fitInSize: (CGSize) viewsize
{
// calculate the fitted size
CGSize size = [ImageHelper fitSize:image.size inSize:viewsize];

UIGraphicsBeginImageContext(viewsize);

float dwidth = (viewsize.width - size.width) / 2.0f;
float dheight = (viewsize.height - size.height) / 2.0f;

CGRect rect = CGRectMake(dwidth, dheight, size.width, size.height);
[image drawInRect:rect];

UIImage *newimg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return newimg;
}
[color=red]3、通过匹配可用空间的长度和宽度来填充图像。每个像素都被使用,但是图像将水平或垂直裁剪。[/color]
//返回居中的缩略图
+ (UIImage *) image: (UIImage *) image centerInSize: (CGSize) viewsize
{
CGSize size = image.size;

UIGraphicsBeginImageContext(viewsize);
float dwidth = (viewsize.width - size.width) / 2.0f;
float dheight = (viewsize.height - size.height) / 2.0f;

CGRect rect = CGRectMake(dwidth, dheight, size.width, size.height);
[image drawInRect:rect];

UIImage *newimg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return newimg;
}

//返回填充的缩略图
+ (UIImage *) image: (UIImage *) image fillSize: (CGSize) viewsize

{
CGSize size = image.size;

CGFloat scalex = viewsize.width / size.width;
CGFloat scaley = viewsize.height / size.height;
CGFloat scale = MAX(scalex, scaley);

UIGraphicsBeginImageContext(viewsize);

CGFloat width = size.width * scale;
CGFloat height = size.height * scale;

float dwidth = ((viewsize.width - width) / 2.0f);
float dheight = ((viewsize.height - height) / 2.0f);

CGRect rect = CGRectMake(dwidth, dheight, size.width * scale, size.height * scale);
[image drawInRect:rect];

UIImage *newimg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return newimg;
}

[color=darkred]//相对比较简单的压缩[/color]
[color=green]- (UIImage *)image:(UIImage *)image centerInSize:(CGSize)viewsize
{
UIGraphicsBeginImageContext(CGSizeMake(viewsize.width, viewsize.height));
[image drawInRect:CGRectMake(0, 0, viewsize.width, viewsize.height)];
UIImage *reSizeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return reSizeImage;
}[/color]

测试


NSDictionary *cate = [self.cates objectAtIndex:indexPath.row];
UIImage *img1 = [UIImage imageNamed:[[cate objectForKey:@"imageName"] stringByAppendingString:@".jpg"]];
NSData *data1 = UIImageJPEGRepresentation(img1, 1.0);
NSLog(@"data1 = %d",data1.length);
UIImage *img2 = [self image:[UIImage imageNamed:[[cate objectForKey:@"imageName"] stringByAppendingString:@".png"]] centerInSize:CGSizeMake(140, 140)];
NSData *data2 = UIImageJPEGRepresentation(img2, 1.0);
NSLog(@"data2 = %d",data2.length);


打印:
2013-07-01 14:04:03.194 Abviewer_iPhone[8829:907] data1 = 288658
2013-07-01 14:04:03.198 Abviewer_iPhone[8829:907] data2 = 859
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值