IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 对PNG图像进行编码 Encoding the PNG image -> 正文阅读

[人工智能]对PNG图像进行编码 Encoding the PNG image

英文原文: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.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后可以自动分块

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:15:13  更:2021-12-06 15:19:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 2:30:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码