| |
|
开发:
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.5.2 通道提取(Pass extraction)????通道提取(见图 4.8)将一个 PNG 图像分割成一系列缩小图像,其中第一个图像定义了一个粗略的视图,随后的图像优化这个粗略的视图使其更清晰,直到最后一个图像填补完成了 PNG 图像。这组缩小图像也称为交错 PNG 图像(interlaced PNG image)。本国际标准定义了两种交错方法。第一种方法是空方法;像素从左到右依次存储,扫描线从上到下依次存储。第二种方法对图像进行多次扫描以生成七个缩小图像的序列。图 4.8说明了样本图像的七次传递。见第 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.5.5 压缩(Compression)? ? 在PNG 图像的一个或多个通道(pass or passes)中的过滤扫描线序列 使用已定义的一种压缩方法进行压缩(见图 4.10)。按顺序首尾相连的过滤扫描线形成压缩阶段的输入。压缩阶段的输出是单个压缩数据流(compressed datastream)。参见第 10 条:压缩。 将第二条过滤扫描线排到第一条过滤扫描线的结尾处。。。依次将同一通道(即缩小图像)内的所有条扫描线组成一个字节数组。其他通道一样操作,再将第二个通道的字节数组排到第一个通道后。。。这样就把一张图像的所有像素都放在这个大字节数组里了。然后压缩,再将压缩后的字节数组均匀分块装到各个idat里即可。这样排序的好处是:在网络中传输时,最先接收到的字节流就是第一个通道里的扫描线,这样即使第二个通道还没传过来,也可以现将第一个通道的内容显示出来,而第一个通道的内容就是最粗糙模糊的缩小图像。这样就实现了逐渐显示图像的目的。 4.5.6 分块(Chunking)????分块可以方便地将压缩数据流划分为易操控的块(见图 4.10)。每个块都有自己的冗余检查。参见第 11 条:块规格。这就是分成idat了,关于idat的格式网上有的是了,也可以下个010editor十六进制编辑器,里面有png的模版,加载png后可以自动分块 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |