在  UIImage+MultiFormat这个类里面添加如下压缩方法,

+(UIImage *)compressImageWith:(UIImage *)image

{

float imageWidth = image.size.width;

float imageHeight = image.size.height;

float width = 640;

float height = image.size.height/(image.size.width/width);

float widthScale = imageWidth /width;

float heightScale = imageHeight /height;

// 创建一个bitmap的context

// 并把它设置成为当前正在使用的context

UIGraphicsBeginImageContext(CGSizeMake(width, height));

if (widthScale > heightScale) {

[image drawInRect:CGRectMake(0, 0, imageWidth /heightScale , height)];

}

else {

[image drawInRect:CGRectMake(0, 0, width , imageHeight /widthScale)];

}

// 从当前context中创建一个改变大小后的图片

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

// 使当前的context出堆栈

UIGraphicsEndImageContext();

return newImage;

}

再在上面箭头代码后面对图片进行压缩

  1. + (UIImage *)sd_imageWithData:(NSData *)data {

    UIImage *image;

    NSString *imageContentType = [NSData sd_contentTypeForImageData:data];

    if ([imageContentType isEqualToString:@"image/gif"]) {

    image = [UIImage sd_animatedGIFWithData:data];

    }

    #ifdef SD_WEBP

    else if ([imageContentType isEqualToString:@"image/webp"])

    {

    image = [UIImage sd_imageWithWebPData:data];

    }

    #endif

    else {

    image = [[UIImage alloc] initWithData:data];

    if (data.length/1024 > 128) {

    image = [self compressImageWith:image];

    }

    UIImageOrientation orientation = [self sd_imageOrientationFromImageData:data];

    if (orientation != UIImageOrientationUp) {

    image = [UIImage imageWithCGImage:image.CGImage

    scale:image.scale

    orientation:orientation];

    }

    }

    return image;

    }

到了这里还需要进行最后一步。就是在SDWebImageDownloaderOperation的connectionDidFinishLoading方法里面的:

UIImage *image = [UIImage sd_imageWithData:self.imageData];

//将等比压缩过的image在赋在转成data赋给self.imageData
NSData *data = UIImageJPEGRepresentation(image, 1);
self.imageData = [NSMutableData dataWithData:data];

再配合    [[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];(图片加载后使用)大功告成,亲测内存基本变化不大,自动释放也来得及。

SDWebImage 加载一些大的图片的时候导致程序崩溃的更多相关文章

  1. 关于SDWebImage加载高清图片导致app崩溃的问题

    链接是对于SDWebImage的使用方法 http://www.cnblogs.com/JimmyBright/p/4457258.html 使用SDWebImage加载高清图片的时候,往往会报内存溢 ...

  2. 解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题

    下面两种现象,用同一种方法解决 1.解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题 2.突然有一天首页访问图片很慢,至少隔20多秒所有图片才会出来.(解析:app使 ...

  3. SDWebImage 加载显示 WebP 与性能问题

    SDWebImage 加载显示 WebP 与性能问题 本文包含自定义下载操作 SDWebImageDownloaderOperation 与编码器 SDWebImageCoder.SDWebImage ...

  4. 使用SDWebImage加载大量图片后造成内存泄露的解决办法

    SDWebImage的知名度就不用说了,github上近10k的star,国内外太多的App使用其进行图片加载. 但是最近在使用过程中发现,在UITableView中不断加载更多的内容,使用SDWeb ...

  5. imagepool前端图片加载管理器(JavaScript图片连接池)

    前言 imagepool是一款管理图片加载的JS工具,通过imagepool可以控制图片并发加载个数. 对于图片加载,最原始的方式就是直接写个img标签,比如:<img src="图片 ...

  6. SDWebImage 加载网络图片失败,重新运行,就能加载成功。

    现象: 使用SDWebImage 加载网络图片,偶尔会有一两张图片就是显示不出来.重新运行有时又可以了. 这个问题的原因是: 当SDWebImage 在加载图片的时候 我用的是- (void)sd_s ...

  7. SDWebImage 加载显示 GIF 与性能问题

    SDWebImage 加载显示 GIF 与性能问题 SDWebImage 4.0 之前,可以用 UIImageView 显示 GIF 图.如果 SDWebImage 4.0 还这么做,只会显示静态图. ...

  8. js加载完所有的图片,适合电子相册哦~~~~

    有些时候要一口气加载完所有的图片,所以代码就要这么写.... var imgArray = [ 'http://s16.mogucdn.com/p1/160202/upload_ifqwcmlcmyy ...

  9. 图片预加载和AJAX的图片预加载

    利用js实现图片预加载,加载所需要图片的路径与名称即可,很容易实现,该方法尤其适用预加载大量的图片: <div class="hidden"> <script t ...

随机推荐

  1. Java集合源码学习(二)ArrayList

    1.关于ArrayList ArrayList直接继承AbstractList,实现了List. RandomAccess.Cloneable.Serializable接口,为什么叫"Arr ...

  2. C# 之 4个访问修饰符和8个声明修饰符详解

    一.4个访问修饰符(是添加到类.结构或成员声明的关键字) [1] Public:公有的,是类型和类型成员的访问修饰符.对其访问没有限制. [2] Internal:内部的,是类型和类型成员的访问修饰符 ...

  3. MySql中Week()函数的用法

    WEEK(date[,mode]):该函数返回日期的星期数 模式 星期的第一天 范围 星期 1 是第一天 0 Sunday 0-53 一年中多一个星期天 1 Monday 0-53 一年多3天 2 S ...

  4. go-关于指针和地址

    经常会见到: p . *p , &p 三个符号  p是一个指针变量的名字,表示此指针变量指向的内存地址,如果使用%p来输出的话,它将是一个16进制数. 而*p表示此指针指向的内存地址中存放的内 ...

  5. 使用ycsb对hbase0.94.11 benchmark

    Ycsb下载地址:https://github.com/brianfrankcooper/YCSB/releases 目前测试hbase0.94.11,因此下载ycsb-0.1.4.tar.gz 1. ...

  6. linux系统虚拟机下安装nginx基础

    虽然安装nginx什么的 .以及如何配置等等一系列的资料案例已经很多了 但是作为菜鸟的我还是搞了半天哈 官网上面也有.但是一些细节方面的并没有说明.导致踩了半天坑才搞好 本案例的系统环境     wi ...

  7. Unknown lifecycle phase "mvn"

    Unknown lifecycle phase "mvn" maven执行命令错误  : 执行输入命令即可,不需要添加 mvn 此处不需要写mvn,而是执行写compile就行,否 ...

  8. 实验3 敏捷开发与XP实践实验报告

    一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:高君天 学号:20165319 指导教师:娄嘉鹏 实验日期:2018年4月27日 实验时间:13:45 - 3:25 实验序号:实验三 ...

  9. MarkdownPad 2在win10上安装及破解(含安装包)

    MarkdownPad 2 是一款较不错的Markdown编辑器,可快速将文本转换为美观的HTML/XHTML的网页格式代码,且操作方便,用户可以通过键盘快捷键和工具栏按钮来使用或者移除Markdow ...

  10. fastAdmin进阶

    基本知识流程一栏链接 bootstrapTable fastadmin系统配置(符内置规则): fastadmin默认的controller已实现的方法 一张图解析fastadmin的表格: fast ...