图片压缩的两种形式(压缩到指定尺寸和压缩到指定大小)

来源:互联网 发布:软件测试加班 编辑:程序博客网 时间:2024/05/21 10:11

转自:http://blog.csdn.net/dkq972958298/article/details/52750741


iOS中,我们为了节省内存,需要对图片来进行处理,来优化程序,提高程序的效率,下面是一个根据自己的要求来重新设置图片的大小:

一、压缩图片有两种方式,第一种是压缩图片的大小,重新生成图片的尺寸:如下


(1)

[html]view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  *  压缩图片到指定尺寸大小  
  3.  *  
  4.  *  @param image 原始图片  
  5.  *  @param size  目标大小  
  6.  *  
  7.  *  @return 生成图片  
  8.  */  
  9. -(UIImage *)compressOriginalImage:(UIImage *)image toSize:(CGSize)size{  
  10.     UIImage * resultImage = image;  
  11.     UIGraphicsBeginImageContext(size);  
  12.     [resultImage drawInRect:CGRectMake(00, 0, size.width, size.height)];  
  13.     UIGraphicsEndImageContext();  
  14.     return image;  
  15. }  
(2)

[html]view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  *  压缩图片到指定尺寸大小  
  3.  *  
  4.  *  @param img 原始图片  
  5.  *  @param sizeKB  目标大小kb  
  6.  *  
  7.  *  @return 生成图片  
  8.  */  
  9. -(UIImage *)drawImgWithOriangeImg:(UIImage *)img withMaxSize:(NSInteger)sizeKB{

        UIImage *image = img;

        UIImage *destImg = image;

        NSData *imgData =UIImagePNGRepresentation(image);

        NSInteger imgSize = [imgDatalength]/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;

    }

  10.  




二、第二种是修改图片的文件大小:如下

[html]view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  *  压缩图片到指定文件大小  
  3.  *  
  4.  *  @param image 目标图片  
  5.  *  @param size  目标大小(最大值)  
  6.  *  
  7.  *  @return 返回的图片文件  
  8.  */  
  9. - (NSData *)compressOriginalImage:(UIImage *)image toMaxDataSizeKBytes:(CGFloat)size{  
  10.     NSData * data = UIImageJPEGRepresentation(image, 1.0);  
  11.     CGFloat dataKBytes = data.length/1000.0;  
  12.     CGFloat maxQuality = 0.9f;  
  13.     CGFloat lastData = dataKBytes;  
  14.     while (dataKBytes > size && maxQuality > 0.01f) {  
  15.         maxQuality = maxQuality - 0.01f;  
  16.         data = UIImageJPEGRepresentation(image, maxQuality);  
  17.         dataKBytes = data.length / 1000.0;  
  18.         if (lastData == dataKBytes) {  
  19.             break;  
  20.         }else{  
  21.             lastData = dataKBytes;  
  22.         }  
  23.     }  
  24.     return data;  
  25. }  

这是压缩图片的两种方式。
0 0
原创粉丝点击