防止图片重复下载方案,图像压缩保存与压缩显示

来源:互联网 发布:淘宝男装店铺简介 编辑:程序博客网 时间:2024/05/19 07:43

图片作为超级吃流量的东东,如何避免它重复下载和占用大量内存打开图片呢?如何避免图片本地没有正在下载过程而重复下载呢?
图像压缩保存与压缩显示:通常使用UIImagePNGRepresentation的方式保存本地文件,它的好处是若该图片背景为透明可以保证它的背景仍旧透明,若使用UIImageJPEGRepresentation(image, 1)这种压缩保存的方式,保存的图像都是白背景,好处是图像质量可以改变,进而实现类似图像的压缩,但是压缩率不可控,不同图像压缩的比例不同。可以通过指定图像的边框来压缩图像显示在内存中,防止把一个很大的图像直接加载如内存,造成内存暴涨。如:UIImage *image = [AppManager resizeImage:[UIImage imageNamed:@”my_backgroud_up_6.png”] toSize:CGSizeMake(WINDOW_WIDTH, 64) scale:1];
图像压缩的方法例子:

//change size+ (UIImage *)resizeImage:(UIImage *)image toSize:(CGSize)scaleSize scale:(CGFloat)scale{    CGSize originalSize = image.size;    CGSize newSize;    if (scale == 1) {        newSize = CGSizeMake(scaleSize.width, scaleSize.height);    }    else {        newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale);    }    CGFloat newScale = scale;    while (newScale > 0.1 && (newSize.width > scaleSize.width || newSize.height > scaleSize.height)) {        newScale -= 0.05;        newSize = CGSizeMake(newSize.width * scale, newSize.height * scale);    }    // Scale the original image to match the new size.    UIGraphicsBeginImageContext(newSize);    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];    UIImage* compressedImage = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return compressedImage;}//1、生成指定尺寸的图片+ (UIImage *)compressImage:(UIImage *)imgSrc :(CGSize)size{    UIGraphicsBeginImageContext(size);    CGRect rect = {{0,0}, size};    [imgSrc drawInRect:rect];    UIImage *compressedImg = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return compressedImg;}//2、生成指定大小图片+(UIImage *)Rarimage:(UIImage *)orginImage  compressionQuality:(float)compressionQuality{    NSData *imageData = [[NSData alloc] initWithData:UIImageJPEGRepresentation(orginImage, compressionQuality)];    //如果图片小于50k 且尺寸>500直接输出 否则压缩    if (imageData.length>50000)    {        UIImage *image = [UIImage imageWithData:imageData];        //如果图片尺寸过大 尺寸等比例压缩        if (image.size.height>500 ||image.size.width>500)        {            UIGraphicsBeginImageContext(CGSizeMake(image.size.width * 0.3, image.size.height * 0.3));            [image drawInRect:CGRectMake(0, 0, image.size.width * 0.3, image.size.height * 0.3)];            image = UIGraphicsGetImageFromCurrentImageContext();            UIGraphicsEndImageContext();           // NSData *imageData2 = [[NSData alloc] initWithData:UIImageJPEGRepresentation(image, compressionQuality)];        }        return image;    }else    {        return orginImage;    }    return nil;}

这个是我写的代码关于这个问题的解决方案及流程图。
刷新新订单时,订单有商家组Icon但是本地没有商家组Icon,异步下载商家组Icon,下载期间暂时不显示商家组Icon(也可以显示下载中默认商家组Icon),下载成功显示商家组Icon,下载失败不显示商家组Icon(也可以显示下载中默认商家组Icon)。当一次刷到多个订单,有多个订单有商家组Icon,这些商家组Icon有重复的,有些商家组Icon本地不存在,那么下载商家组Icon时,保证相同的商家组Icon不重复下载。
这里写图片描述

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 甲减粘液性水肿怎么办 五个月宝宝断奶不吃奶粉怎么办 八个半月的宝宝不爱吃饭怎么办 十个半月宝宝不爱吃饭怎么办 九个半月宝宝不爱吃饭怎么办 七个半月宝宝不爱吃饭怎么办 8个半月宝宝不爱吃饭怎么办 八个半月宝宝不爱吃饭怎么办 特百惠杯子摔坏后不给换怎么办 特百惠水杯摔裂了怎么办 焖烧杯摔瘪了怎么办 苦瓜和虾一起吃中毒怎么办 乐扣盖子坏了怎么办 小孩上课坐不住好动怎么办 5小孩晚上不睡觉怎么办 一年级的孩子上课好动怎么办 一岁宝宝太好动怎么办 3岁宝宝太好动怎么办 孩子学习注意力不集中怎么办 1岁宝宝皮肤黄怎么办 三岁宝宝太皮怎么办 一岁宝宝太皮了怎么办 5岁宝宝学习太皮怎么办 2岁宝宝太皮了怎么办 身上的皮肤很干怎么办 小孩子挑食厌食不吃饭怎么办 1岁宝宝特别淘气怎么办 4岁宝宝有多动症怎么办 3岁宝宝有多动症怎么办 6个月婴儿睡眠少怎么办 7个月婴儿睡眠少怎么办 孩子好动注意力不集中怎么办 学生在课堂上爱讲话怎么办? 幼儿园老师圢小孩脸怎么办 宝宝上幼儿园坐不住怎么办 宝宝在幼儿园总是坐不住怎么办 早教课上宝宝坐不住怎么办? 孩子在幼儿园上课坐不住怎么办 小孩不会写拼音a怎么办 小朋友上课注意力不集中怎么办 一年级孩子上课爱说话怎么办