iOS 图片解压缩的过程

本文探讨了iOS中图片解压缩的过程,包括JPEG、PNG等格式的特点,颜色空间、bytesPerPixel、alpha通道等概念,并介绍了如何进行图片解压缩,强调了解压缩操作对CPU的影响及其在实际开发中的优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在移动app开发过程中,图片往往是不可或缺的资源。从磁盘上加载一张图片,到显示到屏幕上,中间经过了一些复杂的过程,其中非常重要的一步就是对图片的解压缩。那么,什么是图片解压缩?为什么要对图片解压缩?如何对图片解压缩?下面从这几个问题进行分析。
在解决上面的问题前,首先了解一些简单的概念。

和解压缩相关的概念

jpeg 和 png

  1. jpeg: jpeg 是一种有损压缩的图片格式,不支持透明通道。有损压缩是不可逆的,也就是说,不能从一张有损压缩的图片得到原图片数据。
  2. png: png 是一种无损压缩的图片格式。相对于jpeg来说,png 支持透明通道。因为png是无损压缩的,所以可以从png图片得到原图片数据。
    在iOS开发中,苹果提供了专门的api来 生成jpeg格式的图片和png格式的图片。
NSData * imageData = UIImageJPEGRepresentation(image, 0.9); 第二个参数就是压缩质量,官方推荐的系数是0.9。
NSData *imageData = UIImagePNGRepresentation(image); 

从api 也可以看出 jpeg 是有损压缩,png 是无损压缩。

bmp 格式的图片

BMP,全称是bitmap,也是一种图片格式。bitmap 和 jpeg以及png最大的区别就是,bitmap是无损压缩的。由于是无损压缩的,相同的图片,bitmap格式的图片体积,要比jpeg和png格式的图片大很多。看看苹果开发者文档中对bitmap的描述:

A bitmap image (or sampled image) is an array of pixels (or samples). 
Each pixel represents a single point in the image. JPEG, TIFF, and PNG graphics files are examples of bitmap images.

实际上,bitmap图片就是一个像素数组,每一个像素代表图片上的一个点。
显示在屏幕上的图片,实际上就是由一个个的像素点组成的。因此,如果一张jpeg或者png格式的图片想要显示到屏幕上,需要得到该图片的像素数组,这个过程实际上就是解压缩。
这里可能会有个疑惑,既然jpeg、png格式的图片需要解压缩才能显示到屏幕上,为什么不直接使用bitmap格式的图片呢?原因上面也说了,bitmap格式的图片体积要远远大于jpeg和png格式的图片。从一个简单的例子来看下。
图标
这张图片是项目中使用到的一张png格式的图片,大小是2KB,尺寸为48px * 44px。如果一张尺寸为48px*44px,bitmap格式的图片体积是多大呢?
48 * 44 * bytesPerPixel (4) ,大约8KB左右。
在介绍 bytesPerPixel 之前,首先了解一下颜色空间的概念。

颜色空间

在iOS 开发中,一个颜色通常由一组数字来表示。比如1 0 0 ,1 1 1。而颜色空间的作用就是告诉系统如何来解析该颜色。比如说在RGB颜色空间下,1 0 0 表示的红色,而在 BGR 颜色空间下,1 0 0 表示的就是蓝色。由此可知,脱离了颜色空间,那么用来表示颜色的数字将变得毫无意义。iOS 设备中,通常使用的是RGB颜色空间。在程序中需要使用RGB颜色空间时,苹果已经提供了相应的api来创建颜色空间,代码如下:

static CGColorSpaceRef space;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    space = CGColorSpaceCreateDeviceRGB();
});
return space;

核心api 是 CGColorSpaceCreateDeviceRGB:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值