英文原文:https://www.w3.org/TR/PNG/#4Concepts.Encoding

转载请注明出处 https://blog.csdn.net/weixin_43873389/article/details/121734662

灰色背景为个人理解

4.5 对PNG图像进行编码

4.5.1 引言

PNG图像编码过程的概念模型如图4.7所示。下列步骤适用于像素数组或索引数组的编码。调色板和alpha表不是以这种方式编码的。

a. 通道提取(Pass extraction):为了进行渐进式显示(先显示模糊的图像,再逐渐填充细节),可以重新排列 PNG 图像像素以形成多个较小的图像,称为缩小图像或通道(reduced images or passes)。如果网速慢的话看的挺明显的,一开始图片非常模糊

b. 扫描线序列化(Scanline serialization):图像被序列化,成为一条一条的扫描线(scanline)。像素在扫描线中从左到右排序,扫描线从上到下排序。如果需要交错的话,扫描线应该就不是原图像的一行的全部像素了

c. 过滤(Filtering):通过几种特定的过滤方式,每条扫描线被转换为过滤后的扫描线(filtered scanlines),为下一步的图像压缩做准备。

d. 压缩(Compression):图像的所有过滤后的扫描线都会被压缩。

e. 分块(Chunking):压缩后的图像被分成大小合适的块(chunk)。错误检测码(CRC32)被添加到每个块的结尾。这个就是idat块了吧

f. 数据流构造(Datastream construction):各个块被插入到数据流中(datastream)。形成最后的png文件

图4.7 PNG图像编码

4.5.2 通道提取(Pass extraction)

通道提取(见图 4.8)将一个 PNG 图像分割成一系列缩小图像,其中第一个图像定义了一个粗略的视图,随后的图像优化这个粗略的视图使其更清晰,直到最后一个图像填补完成了 PNG 图像。这组缩小图像也称为交错 PNG 图像(interlaced PNG image)。本国际标准定义了两种交错方法。第一种方法是空方法;像素从左到右依次存储,扫描线从上到下依次存储。第二种方法对图像进行多次扫描以生成七个缩小图像的序列。图 4.8说明了样本图像的七次传递。见第 8 节 交错和通道提取。

图4.8 通道提取

4.5.3 扫描线序列化(Scanline serialization)

一行像素,称为扫描线,以字节序列表示。如果没有交错,那么一条扫描线就是原图像的一行,如果交错了(也就是形成了七个reduced image),那么一条扫描线就是reduced image的一行

4.5.4 过滤(Filtering)

PNG 标准化了一种过滤方法(filter method)和几种过滤类型(filter types),用于生成可以被压缩的图像数据。它将扫描线的字节序列转换为等长字节序列,等长字节序列前是一字节的过滤类型(见图 4.9)。过滤类型字节定义了要应用于该条扫描线的过滤方式。对于一个交错PNG图像,编码器应使用单一的过滤方法,但对于缩小图像中的各条扫描线可以使用不同的过滤类型。参见第 9 条:过滤。 应该是因为过滤方法存在png头 ihdr段里的一字节,ihdr段只能有一个。然后过滤类型存在每条扫描线的开头所以可以有很多种

图中右侧的文字描述的很绕口,根据我的理解:图中原扫描线存了5项,每项都是一个像素(每个像素都有红 绿 蓝 透明度 四个值),现在将每项的像素转换成字节形式存起来,并在字节数组前头加一个字节记录过滤类型。

又有了新的理解:过滤类型不同,像素转成的字节也不同。一共五种类型,第一种应该是没变化。其他的 与该像素的左侧像素,左上像素和上方像素有关,以达到减少字节的目的。(参考https://blog.csdn.net/helimin12345/article/details/108210763#t3)

图4.9 序列化并过滤一条扫描线

4.5.5 压缩(Compression)

在PNG 图像的一个或多个通道(pass or passes)中的过滤扫描线序列 使用已定义的一种压缩方法进行压缩(见图 4.10)。按顺序首尾相连的过滤扫描线形成压缩阶段的输入。压缩阶段的输出是单个压缩数据流(compressed datastream)。参见第 10 条:压缩。

将第二条过滤扫描线排到第一条过滤扫描线的结尾处。。。依次将同一通道(即缩小图像)内的所有条扫描线组成一个字节数组。其他通道一样操作,再将第二个通道的字节数组排到第一个通道后。。。这样就把一张图像的所有像素都放在这个大字节数组里了。然后压缩,再将压缩后的字节数组均匀分块装到各个idat里即可。这样排序的好处是:在网络中传输时,最先接收到的字节流就是第一个通道里的扫描线,这样即使第二个通道还没传过来,也可以现将第一个通道的内容显示出来,而第一个通道的内容就是最粗糙模糊的缩小图像。这样就实现了逐渐显示图像的目的。

图4.10 压缩

4.5.6 分块(Chunking)

分块可以方便地将压缩数据流划分为易操控的块(见图 4.10)。每个块都有自己的冗余检查。参见第 11 条:块规格。这就是分成idat了,关于idat的格式网上有的是了,也可以下个010editor十六进制编辑器,里面有png的模版,加载png后可以自动分块

对PNG图像进行编码 Encoding the PNG image相关推荐

  1. c++ 解析从浏览器端传过来的图像base64编码,并转换成opencv识别的格式

    from: c++ 解析从浏览器端传过来的图像base64编码,并转换成opencv识别的格式 #include <cstdint> #include <fstream> #i ...

  2. 中南大学张昊:我非常期待基于AI的图像视频编码技术的创新

    点击上方"LiveVideoStack"关注我们 策划:包研.Alex 编辑:Alex 张昊 年终访谈 #002# 编者按:本周是2021年的最后一周,在这个迎接新年的日子里,Li ...

  3. mysql连接规定时区以及编码_springboot项目中使用mysql连接遇到时区timezone问题,和编码encoding问题解决...

    springboot项目中使用mysql连接遇到时区timezone问题,和编码encoding问题解决 问题原因 1.application.properties的设置 1.1spring.data ...

  4. 图像视频编码新纪元,体验升级技术变革,AR及其关键技术......

    图像视频编码&机器智能 Topic <图像视频编码新纪元 -- 面向机器智能> 虞露  浙江大学 求是特聘教授 在数字经济社会,智能机器正在广泛领域取代人类"观看&quo ...

  5. CImg:插件(plugin)使用说明塈实现JPEG图像内存编码/解码

    杀鸡用牛刀? 如果你想对图像进行简单处理,你一般会想到用什么?可能多数人想到的是OpenCV. 对,OpenCV是个非常强大的图像视觉工具库,用途非常广泛.简单的图像处理用它肯定是可以的. 但Open ...

  6. LIVE1和LIVE2图像数据集 图像视频编码效应去除

    LIVE1和LIVE2图像数据集 图像视频编码效应去除 [live1] 链接: https://pan.baidu.com/s/18ZF_gmwRY3xB46-RKvmCxA?pwd=vcf3 提取码 ...

  7. HEVC核心编码技术之一.图像的编码划分

    Overview of the High Efficiency Video Coding(HEVC) Standard之四 IV. HEVC的编码技术 HEVC Video Coding Techni ...

  8. HarmonyOS之深入解析图像的编码和解码

    一.基本概念 HarmonyOS 图像模块支持图像业务的开发,常见功能如图像解码.图像编码.基本的位图操作.图像编辑等.当然,也支持通过接口组合来实现更复杂的图像处理逻辑. 图像解码:图像解码就是不同 ...

  9. php zip 编码,encoding - 用PHP如何检测一个ZIP包内的文件是在何种编码的系统下创建的...

    事情起源于在WIN下创建的zip放到linux下解压时,中文路径和文件名会出现乱码,于是动手写了个脚本转换zip内文件名的代码.但是,如果是在日语.韩语或者繁体字WIN系统下建立的zip,由于不知道原 ...

  10. [专栏精选]Unity中编码Encoding脱坑指南

    本文节选自洪流学堂公众号技术专栏<大话Unity2018>,未经允许不可转载. 洪流学堂公众号回复专栏,查看更多专栏文章. 洪流学堂,让你快人几步.你好,我是郑洪智. 大智:"昨 ...

最新文章

  1. rejection from MPhil in Technology policy at cambridge
  2. 快速序列化组件MessagePack介绍
  3. leetcode104. 二叉树的最大深度(层序遍历09)
  4. emlog和typecho文章采集插件 简数第三方数据采集
  5. vue 过滤器 filter
  6. 在 RAID 磁盘上面架构 LVM 系统
  7. Atitit 图像处理 灰度图片 灰度化的原理与实现
  8. 深度好文:这才是实际工作中的竞品分析
  9. stm32 matlab 滤波器,STM32实现IIR滤波器,可用matlab生成的头文件
  10. windows 调试若干知识
  11. openGPS.cn - 关于手机号定位方面的个人理解
  12. 一念起,天涯咫尺;一念灭,咫尺天涯。—第八天
  13. Delphi中record的使用
  14. 什么是高可用性_什么是高可用性| 第2部分
  15. Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(一)
  16. EasyRTC实现基于WebRTC技术实现的即时通信类应用
  17. Win10电脑创建本地网站
  18. 艾美捷低内毒素CpG ODN寡聚脱氧核苷酸全家族系列
  19. 关于通用型人工智能语言模型ChatGPT的感悟
  20. WPF添加加载动画遮罩

热门文章

  1. Lowest Common Ancestor
  2. 液晶面板里面有些什么配件_TFT液晶屏的基本组成和部件是什么
  3. LintCode 1256. 第n个数位 JavaScript算法
  4. 如何实现网站内容秒收录?网站秒收录技巧分享!
  5. Makefile之origin函数
  6. 【国家集训队】跳跳棋(LCA+二分答案)
  7. Android 录制视频添加时间水印,Android开发教程入门
  8. NOIP模拟赛 czy的后宫5
  9. 长方形的周长公式的c语言,长方形周长公式
  10. 上海二工大 - 健康日报AutoCheck