iOS压缩图片大小

最近碰到一个比较愚蠢的问题,项目中做的拍照或者从相册选择图片上传时,没有经过处理,直接把原图上传了,导致在列表中看的时候,明明是小图片流量却要爆炸了,想想iphone拍出照片大小可都是以M为单位的。所以赶紧做了下压缩处理再上传。为了方便根据不同压缩需求调用,这里采用调用可修改参数的方法的做法,更加灵活一点。调用的方法如下:

//图片伸缩到指定大小  
- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize forImage:(UIImage *)originImage  
{  
    UIImage *sourceImage = originImage;// 原图  
    UIImage *newImage = nil;// 新图  
    // 原图尺寸  
    CGSize imageSize = sourceImage.size;  
    CGFloat width = imageSize.width;  
    CGFloat height = imageSize.height;  
    CGFloat targetWidth = targetSize.width;// 目标宽度  
    CGFloat targetHeight = targetSize.height;// 目标高度  
    // 伸缩参数初始化  
    CGFloat scaleFactor = 0.0;  
    CGFloat scaledWidth = targetWidth;  
    CGFloat scaledHeight = targetHeight;  
    CGPoint thumbnailPoint = CGPointMake(0.0,0.0);  
      
    if (CGSizeEqualToSize(imageSize, targetSize) == NO)  
    {// 如果原尺寸与目标尺寸不同才执行  
        CGFloat widthFactor = targetWidth / width;  
        CGFloat heightFactor = targetHeight / height;  
          
        if (widthFactor > heightFactor)  
            scaleFactor = widthFactor; // 根据宽度伸缩  
        else  
            scaleFactor = heightFactor; // 根据高度伸缩  
        scaledWidth= width * scaleFactor;  
        scaledHeight = height * scaleFactor;  
          
        // 定位图片的中心点  
        if (widthFactor > heightFactor)  
        {  
            thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;  
        }  
        else if (widthFactor < heightFactor)  
        {  
            thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;  
        }  
    }  
      
    // 创建基于位图的上下文  
    UIGraphicsBeginImageContext(targetSize);  
      
    // 目标尺寸  
    CGRect thumbnailRect = CGRectZero;  
    thumbnailRect.origin = thumbnailPoint;  
    thumbnailRect.size.width= scaledWidth;  
    thumbnailRect.size.height = scaledHeight;  
      
    [sourceImage drawInRect:thumbnailRect];  
      
    // 新图片  
    newImage = UIGraphicsGetImageFromCurrentImageContext();  
    if(newImage == nil)  
        NSLog(@"could not scale image");  
      
    // 退出位图上下文  
    UIGraphicsEndImageContext();  
    return newImage;  
}  

我在注释里都写明了一下。这个方法接受两个参数,一个是要压缩到的尺寸,另一个是原图。调用的过程也很简单,比如:

// 伸缩图片  
if ([self imageByScalingAndCroppingForSize:CGSizeMake(100, 100) forImage:theImage]) {// 伸缩成功  
    theImage = [self imageByScalingAndCroppingForSize:CGSizeMake(100, 100) forImage:theImage];  
}  

这样就可以了,我把名为theImage的图片文件压缩到100*100的尺寸,经过测试,原来1M的图片处理后就只有20多k了,这样流量的压力就大大减少啦。

这个方法也可以用来伸缩图片的尺寸,不过我还是用来压缩的,在不追求高清晰度的情况下,使用还是很方便灵活的,希望能帮到大家~


查看作者首页

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,963评论 25 707
  • -(UIImage *)getImageSizeTo:(UIImage *)image { //如果图片太小就不需...
    CZF峰峰阅读 784评论 4 3
  • LZ-Says:小沈阳版程序员~~~程序员其实可痛苦的了......需求一做一改,一个月就过去了;嚎~需求再一改一...
    静心Study阅读 3,833评论 1 14
  • 时钟滴滴答答奔走,匆匆的脚步追赶着昨日的背影,沉沉夜色伴着微凉晚风,初夏就这样不约而至。玉兰花开上了枝头,清新的空...
    柠C小姐阅读 291评论 0 2
  • 亲爱的枚我看见你了,我这个特别爱学习几乎要听完所有的课,才觉得那是成功的唯一路径,以为吃得苦中苦方为人上人,学习是...
    以心为师阅读 141评论 0 0