SDWebImage 修改缓存图片大小以及从缓存中获取图片资源

原创 2016年08月30日 17:02:36

SDWebImage经常用于iOS开发中的图片缓存加载,加载中先是通过SDImageCache从内存中查找是否有图片,将URL作为图片资源在内存中的唯一索引来进行查找。有缓存,则通过代理进行回调展示图片。无,则通过NSURLConnection来进行下载,下载完成后会保存在内存中。

  • 修改缓存图片大小
    实际开发中,有可能因为服务器的的图片尺寸过大,用SDWebImage进行下载原图会造成内存崩溃。例如:Received memory warning.Message from debugger: Terminated due to memory issue.直接导致程序闪退,或者机器重启。

1.在SDWebImage包中找到 UIImage+MultiFormat.m
2.添加修改图片的类方法,代码如下:

+(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;

}

3.在 + (UIImage )sd_imageWithData:(NSData )data 方法中,进行修改 代码如下:

+ (UIImage *)sd_imageWithData:(NSData *)data {
    if (!data) {
        return nil;
    }

    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;
}
  • 从缓存中获取图片资源
    有时候缓存中有很多图片资源,我们想单独的去取一张或者多张图片时候,又不想去再次下载。这个时候我们可以通过目标图片的URL作为在SDImageCache内存中的唯一索引去查找。
UIImageView *longPressView = [[UIImageView alloc] init];
NSString *URL = @"http://xxx/image/xx";
UIImage *cachedImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:URL];
longPressView.image = cachedImage;
版权声明:本文为博主原创文章,未经博主允许不得转载。

SDWebImage——一个可管理远程图片加载的类库,异步加载图片设置图片大小,添加图片缓存

SDWebImage使用——一个可管理远程图片加载的类库 SDWebImage托管在github上。https://github.com/rs/SDWebImage 这个类库提供一个UIImage...
  • xxcios
  • xxcios
  • 2013年07月05日 12:03
  • 1063

SDWebImage指定缓存图片大小

这几天在做iOS上的网络图片的异步加载和缓存。网上查了下,决定用SDWebImage实现。按照网络的教程,走了一遍,没什么问题。但是程序运行起来发现加载起来的图片都变得很模糊,本人有一点平面设计的经验...

设置SDWebImage中maxCacheSize动态管理图片内存缓存大小无效。maxCacheSize和maxMemoryCost的定义和使用。

在按照之前我的那片博文介绍的方法修复了强引用造成的SDWebImage无法释放自己的图片缓存后,虽然它已经可以在收到内存警报时清除内存的缓存,但是却仍然会偶尔遇到闪退。自己猜测可能是因为在收到内存警报...

缓存图片资源

一、使用内存缓存,通过使用LruCache类,需要确定缓存的大小,如使用app运行内存的1/8: private LruCache mMemoryCache; @Override protected...

【Cocos2d-x】新手自学(七)百分比读取进度加载图片资源到缓存(2.0.1版本)

昨天下载了最新的cocos2d-x   是2.0.1版本的...所以本文章是参考2.0版本的例子写的... 可以发现,2.0版本后不单单只有一个帧率了..还多了两...

android app -- Picasso 二级缓存加载图片,可控制加载图片大小(附小demo)

今天小组开会,听组长提到Picasso 加载图片,之前一直用的都是imageLoader加载图片,刚好这几天临近过年,项目比较松,下午抽了一段时间学习了一下这个加载图片的神器。 Picasso 官网...

.net生成带参数二维码存为图片,并且可以控制图片大小,数据库存入缓存

这是我第一次写Json的数据,发现Json和Cookie,S

IOS网络图片缓存类库SDWebImage

  • 2013年08月19日 21:51
  • 53KB
  • 下载

SDWebImage 处理URL不变图片资源改变的情况1

http://www.cnblogs.com/renshengruozhiruchujian/p/5886382.html SDWebImage支持URL不变时更新图片内容 S...
  • jeffasd
  • jeffasd
  • 2016年11月02日 16:46
  • 2100

SDWebImage 处理URL不变图片资源改变的情况2

http://blog.sina.com.cn/s/blog_75a855980102wfvp.html SDWebImage支持URL不变时更新图片内容 关于SDWebImage...
  • jeffasd
  • jeffasd
  • 2016年11月02日 16:47
  • 682
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SDWebImage 修改缓存图片大小以及从缓存中获取图片资源
举报原因:
原因补充:

(最多只允许输入30个字)