广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >PNG图片压缩原理是什么
  • 706
分享到

PNG图片压缩原理是什么

2024-04-02 19:04:59 706人浏览 独家记忆
摘要

这篇文章主要介绍“PNG图片压缩原理是什么”,在日常操作中,相信很多人在PNG图片压缩原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PNG图片压缩原理是什么”的疑惑

这篇文章主要介绍“PNG图片压缩原理是什么”,在日常操作中,相信很多人在PNG图片压缩原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PNG图片压缩原理是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

什么是PNG

PNG的全称叫便携式网络图型(Portable Network Graphics)是目前流行的网络传输和展示的图片格式,原因有如下几点:

  •  无损压缩:PNG图片采取了基于LZ77派生算法对文件进行压缩,使得它压缩比率更高,生成的文件体积更小,并且不损失数据。

  •  体积小:它利用特殊的编码方法标记重复出现的数据,使得同样格式的图片,PNG图片文件的体积更小。网络通讯中因受带宽制约,在保证图片清晰、逼真的前提下,优先选择PNG格式的图片。

  •  支持透明效果:PNG支持对原图像定义256个透明层次,使得图像的边缘能与任何背景平滑融合,这种功能是GIF和JPEG没有的。

PNG类型

PNG图片主要有三个类型,分别为 PNG 8/ PNG 24 / PNG 32。

  •  PNG 8:PNG 8中的8,其实指的是8bits,相当于用2^8(2的8次方)大小来存储一张图片的颜色种类,2^8等于256,也就是说PNG 8能存储256种颜色,一张图片如果颜色种类很少,将它设置成PNG 8得图片类型是非常适合的。

  •  PNG 24:PNG 24中的24,相当于3乘以8 等于 24,就是用三个8bits分别去表示 R(红)、G(绿)、B(蓝)。R(0~255),G(0~255),B(0~255),可以表达256乘以256乘以256=16777216种颜色的图片,这样PNG 24就能比PNG 8表示色彩更丰富的图片。但是所占用的空间相对就更大了。

  •  PNG 32:PNG 32中的32,相当于PNG 24 加上 8bits的透明颜色通道,就相当于R(红)、G(绿)、B(蓝)、A(透明)。R(0~255),G(0~255),B(0~255),A(0~255)。比PNG 24多了一个A(透明),也就是说PNG 32能表示跟PNG 24一样多的色彩,并且还支持256种透明的颜色,能表示更加丰富的图片颜色类型。

怎么说呢,总的来说,PNG 8/ PNG 24 / PNG 32就相当于我们屌丝心中,把女神分为三类:

  •  一类女神 = PNG 8:屌丝舔狗们见到这一类女神,顿时会觉得心情愉悦、笑逐颜开,屌丝发黑的印堂逐渐舒展,确认过眼神,是心动的感觉。

  •  二类女神 = PNG 24:第二类女神开始厉害了,会给屌丝们一种菊花一紧、振聋发聩的心弦震撼,接触多了第二类女神能让屌丝每天精神抖擞,延年益寿。

  •  三类女神 = PNG 32:在第三类女神面前,所有的语言都显得苍白无力。超凡脱俗、天神下凡都不足以描摹她美色的二分之一。我曾经只有在梦里才见到过。

哎。。。我的初恋,看着她现在的照片,应该是触及PNG 24这一等级了。

PNG图片数据结构

PNG图片的数据结构其实跟Http请求的结构很像,都是一个数据头,后面跟着很多的数据块,如下图所示:

PNG图片压缩原理是什么

如果你用vim的查看编码模式打开一张png图片,会是下面这个样子:

PNG图片压缩原理是什么

看到这一坨坨十六进制编码是不是感觉和女神的心思一样晦涩难懂?

老弟 莫慌,讲实话,如果撩妹纸有那一坨坨乱码那么简单,哥哥我早就妻妾成群啦。

接下来我就一一讲解这一堆十六进制编码的含义。

8950 4e47 0d0a 1a0a:这个是PNG图片的头,所有的PNG图片的头都是这一串编码,图片软件通过这串编码判定这个文件是不是PNG格式的图片。

0000 000d:是iHDR数据块的长度,为13。

4948 4452:是数据块的type,为IHDR,之后紧跟着是data。

0000 02bc:是图片的宽度。

0000 03a5:是高度。

以此类推,每一段十六进制编码就代表着一个特定的含义。下面其他的就不一一分析了,太多了,小伙伴们自己去查吧。

什么样的PNG图片更适合压缩

常规的png图片,颜色越单一,颜色值越少,压缩率就越大,比如下面这张图:

PNG图片压缩原理是什么

它仅仅由红色和绿色构成,如果用0代表红色,用1代表绿色,那用数字表示这张图就是下面这个样子:

00000000000000000

00000000000000000

00000000000000000

1111111111111111111111111

1111111111111111111111111

1111111111111111111111111

我们可以看到,这张图片是用了大量重复的数字,我们可以将重复的数字去掉,直接用数组形式的[0, 1]就可以直接表示出这张图片了,仅仅用两个数字,就能表示出一张很大的图片,这样就极大的压缩了一张png图片。

所以!颜色越单一,颜色值越少,颜色差异越小的png图片,压缩率就越大,体积就越小。

PNG的压缩

PNG图片的压缩,分两个阶段:

  •  预解析(Prediction):这个阶段就是对png图片进行一个预处理,处理后让它更方便后续的压缩。说白了,就是一个女神,在化妆前,会先打底,先涂乳液和精华,方便后续上妆、美白、眼影、打光等等。

  •  压缩(Compression):执行Deflate压缩,该算法结合了 LZ77 算法和 Huffman 算法对图片进行编码。

预解析(Prediction)

png图片用差分编码(Delta encoding)对图片进行预处理,处理每一个的像素点中每条通道的值,差分编码主要有几种:

  •  不过滤

  •  X-A

  •  X-B

  •  X-(A+B)/2(又称平均值)

  •  Paeth推断(这种比较复杂)

假设,一张png图片如下:

PNG图片压缩原理是什么

这张图片是一个红色逐渐增强的渐变色图,它的红色从左到右逐渐加强,映射成数组的值为[1,2,3,4,5,6,7,8],使用X-A的差分编码的话,那就是:

[2-1=1, 3-2=1, 4-3=1, 5-4=1, 6-5=1, 7-6=1, 8-7=1]

得到的结果为

[1,1,1,1,1,1,1]

[1,1,1,1,1,1,1]这个结果出现了大量的重复数字,这样就非常适合进行压缩。

这就是为什么渐变色图片、颜色值变化不大并且颜色单一的图片更容易压缩的原理。

差分编码的目的,就是尽可能的将png图片数据值转换成一组重复的、低的值,这样的值更容易被压缩。

此外,还要注意的是,差分编码处理的是每一个的像素点中每条颜色通道的值,R(红)、G(绿)、B(蓝)、A(透明)四个颜色通道的值分别进行处理。

压缩(Compression)

压缩阶段会将预处理阶段得到的结果进行Deflate压缩,它由 Huffman 编码 和 LZ77压缩构成。

如前面所说,Deflate压缩会标记图片所有的重复数据,并记录数据特征和结构,会得到一个压缩比大的png图片 编码数据。

Deflate是一种压缩数据流的算法. 任何需要流式压缩的地方都可以用。

还有就是我们前面说过,一个png图片,是由很多的数据块构成的,但是数据块里面的一些信息其实是没有用的,比如用Photoshop保存了一张png图片,图片里就会有一个区块记录“这张图片是由photshop创建的”,很多类似这些信息都是无用的,如果用photoshop的“导出WEB格式”就能去掉这些无用信息。导出web格式前后对比效果如下图所示:

PNG图片压缩原理是什么

可以看到,导出web格式,去除了很多无用信息后,图片明显小了很多。

到此,关于“PNG图片压缩原理是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: PNG图片压缩原理是什么

本文链接: https://www.lsjlt.com/news/85607.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PNG图片压缩原理是什么
    这篇文章主要介绍“PNG图片压缩原理是什么”,在日常操作中,相信很多人在PNG图片压缩原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PNG图片压缩原理是什么”的疑惑...
    99+
    2022-10-19
  • Linux下怎么压缩和优化jpg与png图片
    这篇文章主要介绍“Linux下怎么压缩和优化jpg与png图片”,在日常操作中,相信很多人在Linux下怎么压缩和优化jpg与png图片问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下怎么压缩和优化...
    99+
    2023-06-12
  • 将文件压缩成PNG图像存储方法是什么
    本篇内容介绍了“将文件压缩成PNG图像存储方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!这样可以...
    99+
    2022-10-19
  • Android-图片压缩详解:原理、方法与实践
    前言1. 图片压缩的原理2. Android图片压缩的方法2.1 BitmapFactory.Options2.1.1 尺寸压缩2.1.2 质量压缩 2.2 第三方库 3. 实践:Android图片压缩3.1 创建...
    99+
    2023-08-18
    android android studio ide
  • Java中的哈夫曼压缩原理是什么
    这篇文章主要介绍“Java中的哈夫曼压缩原理是什么”,在日常操作中,相信很多人在Java中的哈夫曼压缩原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的哈夫曼压缩原理是什么”的疑惑有所帮助!...
    99+
    2023-06-20
  • Java图片批量压缩像素的实现方法是什么
    Java图片批量压缩像素的实现方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。图片压缩大法为了防止用户流量的丢失,即使在5g 即将来临的情况下,压缩算法...
    99+
    2023-06-22
  • 怎么处理图片过大问题?如何把图片压缩到最小
      在日常办公中,我们总会遇到各种各样的问题,比如如何将PDF转换成Word,图片的压缩,视频压缩等等,这些都是上班族经常遇到的问题,小编在上班的时候经要与图片打交道,可是经常遇到这样的问题就是图片太大...
    99+
    2022-10-18
  • python将图片原比例缩小的方法是什么
    在Python中,可以使用Pillow库来缩小图片并保持其原比例。可以按照以下步骤进行操作:1. 首先,安装Pillow库。可以使用...
    99+
    2023-09-20
    python
  • Android图片框架Glide原理是什么
    本篇内容主要讲解“Android图片框架Glide原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android图片框架Glide原理是什么”吧!首先引入依赖    ...
    99+
    2023-07-04
  • JS实现IE6下PNG图片透明的方法是什么
    JS实现IE6下PNG图片透明的方法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。和大家重点讨论一下用Javascript实现IE6...
    99+
    2022-10-19
  • 前端JS图片懒加载原理是什么
    这篇文章主要介绍“前端JS图片懒加载原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“前端JS图片懒加载原理是什么”文章能帮助大家解决问题。原理图片懒加载的原理是没有在可视区域的图片暂时不加载...
    99+
    2023-07-05
  • python批量压缩图像的完整步骤是什么
    这期内容当中小编将会给大家带来有关python批量压缩图像的完整步骤是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。背景今天在工作中,同事遇到一个上传图片的问题:系统要求的图片大小不能超过512KB。...
    99+
    2023-06-22
  • web前端图片压缩、方向纠正、预览、上传插件的方法是什么
    这篇文章主要讲解了“web前端图片压缩、方向纠正、预览、上传插件的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web前端图片压缩、方向纠正、预览...
    99+
    2022-10-19
  • golang切片原理是什么
    golang切片原理是底层数组、长度和容量、切片的扩容和切片的操作。详细介绍:1、底层数组,切片是建立在底层数组之上的,底层数组是实际存储元素的地方。切片通过指针指向底层数组的起始位置;2、长度和容量,切片的长度不能超过容量,但可以通过追加...
    99+
    2023-12-12
    golang切片
  • K8s的集群伸缩原理是什么
    这篇文章给大家介绍K8s的集群伸缩原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。阿里云 K8s 集群的一个重要特性,是集群的节点可以动态的增加或减少。有了这个特性,集群才能在计算资源不足的情况下扩容新的节点,...
    99+
    2023-06-04
  • Redis中集群伸缩的原理是什么
    本篇文章给大家分享的是有关Redis中集群伸缩的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、集群扩容1. 手动扩容(1) 准备节点 9007,并加入集群192....
    99+
    2023-06-15
  • ps图片等比例放大缩小快捷键是什么
    这篇文章主要介绍“ps图片等比例放大缩小快捷键是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ps图片等比例放大缩小快捷键是什么”文章能帮助大家解决问题。ps图片等比例放大缩小快捷键:首先我们拖...
    99+
    2023-07-02
  • Redis哈希分片原理是什么
    本篇内容介绍了“Redis哈希分片原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!集群分片模式如果...
    99+
    2022-10-18
  • Component的图标和图片处理方法是什么
    本篇内容介绍了“Component的图标和图片处理方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!这个React应用左上角的reac...
    99+
    2023-06-04
  • numpy二维数组切片的原理是什么
    numpy二维数组切片的原理是基于数组的索引和切片操作。在numpy中,可以使用两个冒号(:)来表示切片的开始和结束位置。二维数组可...
    99+
    2023-10-26
    numpy
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作