转自:http://blog.csdn.net/dkq972958298/article/details/52750741
iOS中,我们为了节省内存,需要对图片来进行处理,来优化程序,提高程序的效率,下面是一个根据自己的要求来重新设置图片的大小:
一、压缩图片有两种方式,第一种是压缩图片的大小,重新生成图片的尺寸:如下
(1)
- /**
- * 压缩图片到指定尺寸大小
- *
- * @param image 原始图片
- * @param size 目标大小
- *
- * @return 生成图片
- */
- -(UIImage *)compressOriginalImage:(UIImage *)image toSize:(CGSize)size{
- UIImage * resultImage = image;
- UIGraphicsBeginImageContext(size);
- [resultImage drawInRect:CGRectMake(00, 0, size.width, size.height)];
- UIGraphicsEndImageContext();
- return image;
- }
(2)
- /**
- * 压缩图片到指定尺寸大小
- *
- * @param img 原始图片
- * @param sizeKB 目标大小kb
- *
- * @return 生成图片
- */
-
-(UIImage *)drawImgWithOriangeImg:(UIImage *)img withMaxSize:(NSInteger)sizeKB{
UIImage *image = img;
UIImage *destImg = image;
NSData *imgData = UIImagePNGRepresentation(image);
NSInteger imgSize = [imgData length]/1000;
NSLog(@"原图片尺寸:%ldKB",imgSize);
if (imgSize > sizeKB *1000) {
NSInteger ratio = ceil(((double)imgSize)/(sizeKB *1000));
CGSize newSize = CGSizeMake(image.size.width/ratio, image.size.height/ratio);
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
destImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
return destImg;
}
-
二、第二种是修改图片的文件大小:如下
- /**
- * 压缩图片到指定文件大小
- *
- * @param image 目标图片
- * @param size 目标大小(最大值)
- *
- * @return 返回的图片文件
- */
- - (NSData *)compressOriginalImage:(UIImage *)image toMaxDataSizeKBytes:(CGFloat)size{
- NSData * data = UIImageJPEGRepresentation(image, 1.0);
- CGFloat dataKBytes = data.length/1000.0;
- CGFloat maxQuality = 0.9f;
- CGFloat lastData = dataKBytes;
- while (dataKBytes > size && maxQuality > 0.01f) {
- maxQuality = maxQuality - 0.01f;
- data = UIImageJPEGRepresentation(image, maxQuality);
- dataKBytes = data.length / 1000.0;
- if (lastData == dataKBytes) {
- break;
- }else{
- lastData = dataKBytes;
- }
- }
- return data;
- }
这是压缩图片的两种方式。