对关于iOS图片压缩的一点积累

简介: 在移动端对用户的图片进行压缩处理是在所难免,有时候我们需要对图形的尺寸进行改变而有时候需要进行体积的减小,方便上传和节约用户流量。因此压和缩是不同的两个概念“压”:指文件体积进行变小,但像素数不变,长和宽不变,质量减少,文件体积也就会减少。

在移动端对用户的图片进行压缩处理是在所难免,有时候我们需要对图形的尺寸进行改变而有时候需要进行体积的减小,方便上传和节约用户流量。

因此压和缩是不同的两个概念

“压”:指文件体积进行变小,但像素数不变,长和宽不变,质量减少,文件体积也就会减少。

“缩”:指图片的尺寸变小,造成像素点数减少,这样文件体积同样会减少。

先谈谈“压”吧

在iOS开发中读取图片常用的就是两个函数方法:

  • UIImagePNGRepresentation(UIImage* image)
  • UIImageJPEGRepresentation(UIImage* image, 1.0)

它们两个都是读取图片的,不同的是第一个函数的参数只有一个,

而第二个函数多了一个设置压缩比例的参数

第一个函数对图片进行原生态的加载,不损伤图片原有的性质,

而第二个函数由于可以增添压缩值就造成了对原有图片质量进行损害。

另外还要注意两点:

  1. 即使 UIImageJPEGRepresentation(UIImage* image, 1.0)这个函数参数为1.0,它所返回出来的图片所占的内存也要比UIImagePNGRepresentation(UIImage* image)的所占的内存小一些

  2. 顾名思义PNG函数返回的当然是png格式的图片
    JPEG函数返回的当然是jpeg格式的图片

    现实开发中我们怎样选择
    以QQ空间上传图片为例吧!

我们需要考虑到当前用户所处的网路状态,流量用户倘若我们上传原图,岂不是非常不合理的行为?

-WIFI状态也要根据用户网络质量选择一般、高清、原图的质量吧。

所以我个人建议如下:

  • 当用户使用网络为2G/3G/4G若不提供给用户选择图片质量的权限
    的时候建议使用UIImageJPEGRepresentation(UIImage* image, 1.0),至于最后一个参数选择多少,可以进行深入研究选择参数
  • 当用户处于WIFI状态,可以提供用户选择图片质量的权利,若选择一般或高清仍然使用UIImageJPEGRepresentation(UIImage* image, 1.0)函数进行参数的合理化选择参数
  • 当处于WIFI状态,用户选择原图的时候建议选择UIImagePNGRepresentation(UIImage* image),这样的质量效果要比UIImageJPEGRepresentation(UIImage* image, 1.0)质量好一些。

    接着再谈谈“缩”吧

    对于缩也就是改变图片的大小,实现的原理是利用drawInRect:函数进行原图片的重新绘制

    /*
     *  压缩图片至目标尺寸
     *
     *  @param sourceImage 源图片
     *  @param targetWidth 图片最终尺寸的宽
     *
     *  @return 返回按照源图片的宽、高比例压缩至目标宽、高的图片
     */ 
    
     - (UIImage *)compressImage:(UIImage *)sourceImage toTargetWidth:
    (CGFloat)targetWidth {
    
         CGSize imageSize = sourceImage.size; 
    
         CGFloat width = imageSize.width;
    
         CGFloat height = imageSize.height;
    
         CGFloat targetHeight = (targetWidth / width) * height; 
    
        UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight));  
    
         [sourceImage drawInRect:CGRectMake(0, 0, targetWidth, targetHeight)];
    
        UIImage *newImage =UIGraphicsGetImageFromCurrentImageContext(); 
    
    UIGraphicsEndImageContext(); return newImage; 
    

最后附上一个压缩对照表,在实战中可以查阅这张表进行何以选择参数值
这里写图片描述

相关文章
|
6月前
|
JSON JavaScript 安全
iOS应用程序数据保护:如何保护iOS应用程序中的图片、资源和敏感数据
iOS应用程序数据保护:如何保护iOS应用程序中的图片、资源和敏感数据
59 1
|
iOS开发
iOS TextView插入表情或者图片后字体变大或变小
iOS TextView插入表情或者图片后字体变大或变小
111 1
|
Android开发 iOS开发
iOS 替换WebView网页图片为本地图片
iOS 替换WebView网页图片为本地图片
263 0
|
6月前
|
存储 缓存 安全
基于iOS平台的高效图片缓存策略实现
【4月更文挑战第22天】 在移动应用开发中,图片资源的加载与缓存是影响用户体验的重要因素之一。尤其对于iOS平台,由于设备存储空间的限制以及用户对流畅性的高要求,设计一种合理的图片缓存策略显得尤为关键。本文将探讨在iOS环境下,如何通过使用先进的图片缓存技术,包括内存缓存、磁盘缓存以及网络请求的优化,来提高应用的性能和响应速度。我们将重点分析多级缓存机制的设计与实现,并对可能出现的问题及其解决方案进行讨论。
|
6月前
|
存储 缓存 算法
实现iOS平台的高效图片缓存策略
【4月更文挑战第22天】在移动应用开发中,图片资源的处理是影响用户体验的重要因素之一。特别是对于图像资源密集型的iOS应用,如何有效地缓存图片以减少内存占用和提升加载速度,是开发者们面临的关键挑战。本文将探讨一种针对iOS平台的图片缓存策略,该策略通过结合内存缓存与磁盘缓存的机制,并采用先进的图片解码和异步加载技术,旨在实现快速加载的同时,保持应用的内存效率。
|
6月前
|
存储 缓存 编解码
实现iOS平台的高效图片缓存策略
【4月更文挑战第23天】在移动应用开发领域,尤其是图像处理密集型的iOS应用中,高效的图片缓存策略对于提升用户体验和节省系统资源至关重要。本文将探讨一种针对iOS平台设计的图片缓存方案,该方案通过结合内存缓存与磁盘缓存的多层次结构,旨在优化图片加载性能并降低内存占用。我们将深入分析其设计理念、核心组件以及在实际场景中的应用效果,同时对比其他常见缓存技术的优势与局限。
|
6月前
|
存储 Web App开发 Android开发
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
613 1
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
|
6月前
按钮的image图片是非圆角,直接对UIButton设置圆角,iOS13系统没有圆角效果的问题及解决方案
按钮的image图片是非圆角,直接对UIButton设置圆角,iOS13系统没有圆角效果的问题及解决方案
48 0
|
6月前
|
存储 缓存 iOS开发
实现iOS平台的高效图片缓存策略
【4月更文挑战第4天】在移动应用开发中,图片资源的加载与缓存是影响用户体验的关键因素之一。尤其对于iOS平台,由于设备存储和内存资源的限制,设计一个高效的图片缓存机制尤为重要。本文将深入探讨在iOS环境下,如何通过技术手段实现图片的高效加载与缓存,包括内存缓存、磁盘缓存以及网络层面的优化,旨在为用户提供流畅且稳定的图片浏览体验。
|
6月前
|
存储 缓存 监控
实现iOS平台的高效图片缓存策略
【4月更文挑战第18天】在移动应用开发中,图片资源的加载与缓存是影响用户体验的重要因素之一。特别是对于iOS平台,合理设计图片缓存策略不仅能够提高应用的响应速度,还能降低内存消耗和网络流量。本文将探讨一种针对iOS环境的图片缓存方案,该方案通过多级缓存机制、内存管理和磁盘存储策略相结合,旨在提升图片加载效率并优化性能。