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

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

图片作为超级吃流量的东东,如何避免它重复下载和占用大量内存打开图片呢?如何避免图片本地没有正在下载过程而重复下载呢?

图像压缩保存与压缩显示:通常使用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不重复下载。

目录
相关文章
|
Ubuntu 定位技术 API
python 通过图片(原图)精确获取图片拍摄的位置,时间,设备等信息
python 通过图片(原图)精确获取图片拍摄的位置,时间,设备等信息
python 通过图片(原图)精确获取图片拍摄的位置,时间,设备等信息
|
9月前
免费图片在线压缩工具
在线图片压缩,快速减小图片大小,不损失太多画质
1116 0
|
jenkins Java Linux
Jenkins环境的部署及任务构建
以上就是Jenkins环境的部署及任务构建的全部内容。希望可以帮助你轻松上手Jenkins,让你的CI/CD之旅更加顺畅!
767 68
|
负载均衡 IDE Java
SpringBoot整合XXL-JOB【04】- 以GLUE模式运行与执行器负载均衡策略
在本节中,我们将介绍XXL-JOB的GLUE模式和集群模式下的路由策略。GLUE模式允许直接在线上改造方法为定时任务,无需重新部署。通过一个测试方法,展示了如何在调度中心配置并使用GLUE模式执行定时任务。接着,我们探讨了多实例环境下的负载均衡策略,确保任务不会重复执行,并可通过修改路由策略(如轮训)实现任务在多个实例间的均衡分配。最后,总结了GLUE模式和负载均衡策略的应用,帮助读者更深入理解XXL-JOB的使用。
955 9
SpringBoot整合XXL-JOB【04】-  以GLUE模式运行与执行器负载均衡策略
|
Windows
写一个批处理,压缩一个文件夹下的所有图片大小
【10月更文挑战第14天】在Windows环境下,使用批处理脚本可以方便地批量压缩图片。以下是一个示例脚本,用于压缩指定目录下的所有.jpg和.png文件,并将压缩后的图片保存到另一个目录中。
1025 3
|
存储 Python
python实现图片与视频转换:将视频保存为图片,将批量图片保存为视频
python实现图片与视频转换:将视频保存为图片,将批量图片保存为视频
|
存储 运维 监控
飞书深诺基于Flink+Hudi+Hologres的实时数据湖建设实践
通过对各个业务线实时需求的调研了解到,当前实时数据处理场景是各个业务线基于Java服务独自处理的。各个业务线实时能力不能复用且存在计算资源的扩展性问题,而且实时处理的时效已不能满足业务需求。鉴于当前大数据团队数据架构主要解决离线场景,无法承接更多实时业务,因此我们需要重新设计整合,从架构合理性,复用性以及开发运维成本出发,建设一套通用的大数据实时数仓链路。本次实时数仓建设将以游戏运营业务为典型场景进行方案设计,综合业务时效性、资源成本和数仓开发运维成本等考虑,我们最终决定基于Flink + Hudi + Hologres来构建阿里云云原生实时湖仓,并在此文中探讨实时数据架构的具体落地实践。
飞书深诺基于Flink+Hudi+Hologres的实时数据湖建设实践
|
SQL 存储 关系型数据库
关于主从延迟,一篇文章给你讲明白了!
关于主从延迟,一篇文章给你讲明白了!
327 1
|
人工智能 语音技术
ModuleNotFoundError: AutomaticSpeechRecognitionPipeline: No module named ‘funasr‘
这篇文章描述了在运行阿里语音AI模型的语音识别时遇到的`ModuleNotFoundError: No module named ‘funasr’`错误,并提供了通过`pip install funasr --upgrade -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html`命令重新安装funasr模块的解决方法。
ModuleNotFoundError: AutomaticSpeechRecognitionPipeline: No module named ‘funasr‘
|
搜索推荐 算法 Python
用伪代码描述冒泡排序算法及其实现
用伪代码描述冒泡排序算法及其实现
1501 0

热门文章

最新文章

下一篇
开通oss服务