JPEG解码——(3)文件头解析
与具体的编码数据空间相比,jpeg文件头占据非常小乃至可以忽略不计的大小。
仍然拿JPEG解码--(1)JPEG文件格式概览中的《animal park》这张图片来举例,从跳过SOS(FF DA)的TAG开始——0x153,
就真正进入了编码数据区域,如下图所示:

其占据的比例为:0x153/0x9721 = 339/38689 = 0.876%,还不到1%,其他jpeg图片也是类似情况。
但是,就是这么小的数据区域,却是至关重要的地方,某些关键的地方一个字节出错了的话,解码就会出错(例如huffman table
中数据),或者重建出的yuv图像异常(例如quantization table中数据)!
本篇博客主要介绍jpeg头信息解析,其中除了huffman table重建较复杂外,其他TAG的解析都比较容易。
1. APP0——FF EO
先贴出这段区域:

从ASCII值可以看出,保存了JFIF——JPEG File Interchange Format(JPEG文件交换格式),后面的几个字节应该是version信
息吧,没深究。
2. DQT——FF DB

量化表有两个,上面贴图只高亮了其中一个表。
从offset=0x16开始的两个字节(0x00 43)为这段区域的size=67,后面的一个字节为表的ID——0x00=0(可以看到第二张表中对
应位置offset=0x5D处为0x1)。
跳过前面三字节从offset=0x19处开始的64字节,即为量化表中量化值。其中需要说明的是,量化值是固定为64字节的,因为按8X8
进行DCT变换的。
工具解析的结果如下:

需要补充两点:
A.亮度信号的Y分量使用DQT表一,UV分量使用表二。
B.亮度信号通常采用细量化(量化值较小),对应位置处,表一通常比表二值要小。此量化原因是人眼对亮度信号比较敏感,采用颗粒度
较细来量化,细量化引入的一个问题会消耗更多的数据空间。
3. SOF——FF C0

在该JPEG解码系列中第一篇已经详细介绍过了,不再赘述。工具解析如下:

4. DHT——FF C4

共有四张表,上面只贴出第一张表。
DHT表的重建有些复杂,涉及底层更多关于数据压缩领域的知识,可以参考“范式霍夫曼编码”相关材料,本博文不再做介绍该编码原理。
JPEG解码——(3)文件头解析的更多相关文章
- DEX文件解析---1、dex文件头解析
DEX文件解析---1.dex文件头解析 一.dex文件 dex文件是Android平台上可执行文件的一种文件类型.它的文件格式可以下面这张图概括: dex文件头一般固定为0x70个字 ...
- wav音频文件头解析
wav概述 WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(ResourceInterchange File Format)文件规范,用于保存Windows平台的音频信息 ...
- JPEG解码——(4)霍夫曼解码
本篇是该系列的第四篇,主要介绍霍夫曼解码相关内容. 承接上篇,文件头解析完毕后,就进入了编码数据区域,即SOS的tag后的区域,也是图片数据量的大头所在. 1. 解码过程规则描述 a)从此颜色分量单元 ...
- 常用文件的文件头(附JAVA测试类)
1. MIDI (mid),文件头:4D546864 2. JPEG (jpg),文件头:FFD8FF 3. PNG (png),文件头:89504E47 4. GIF (gif),文件头:47494 ...
- 【CTF杂项】常见文件文件头文件尾格式总结及各类文件头
文件头文件尾总结 JPEG (jpg), 文件头:FFD8FF 文件尾:FF D9PNG (png), 文件头:89504E47 文件尾:AE 42 60 82GIF (gif), 文件头:47494 ...
- 【杂项】各类文件头结合winhex使用-转载
———常用文件头——— JPEG (jpg),文件头:FFD8FFE1 PNG (png),文件头:89504E47 (0D0A1A0A) GIF (gif),文件头:47494638 ZIP Arc ...
- PE文件解析器的编写(二)——PE文件头的解析
之前在学习PE文件格式的时候,是通过自己查看各个结构,自己一步步计算各个成员在结构中的偏移,然后在计算出其在文件中的偏移,从而找到各个结构的值,但是在使用C语言编写这个工具的时候,就比这个方便的多,只 ...
- 解析swf文件头,获取flash的原始尺寸
要想解析swf文件头,首先要弄清楚的当然是swf文件格式规范.规范中对swf文件格式作了详细的说明.关于swf文件头,它是由以下几个部分组成:+-------+---+--------+------- ...
- PE文件头格式解析
前言: 昨天写了一题de1ctf的题,发现要脱壳,手脱之后发现要iat修复,我就发现自己在这块知识缺失了,win逆向,好像一直都是打ctf,然后用逆向方法论去肝的 其他方面倒是没有很深入学习,但实际上 ...
随机推荐
- 大白话Java多线程,小白都能看的懂的哦
什么是线程 说到线程我们应该先了解下什么是进程,下面这个图片大家应该都比较熟悉吧. 我们看到的这些单独运行的程序就是一个独立的进程,进程之间是相互独立存在的.我们上面图中的360浏览器.百度云盘等等都 ...
- [leetcode]75.Sort Color三指针
import java.util.Arrays; /** * Given an array with n objects colored red,white or blue, * sort them ...
- 有关CSS 定位中的盒装模型、position、z-index的学习心得
开始整体之前我需要说明两个概念: 第一个就是 一切皆为框 也就是说在HTML中的不管是是块级的还是内联的,都可以认为成块的,唯一的区别就是块的会独自占据一行 第二个文档流: 一个网页可以看作是 ...
- 企业集群架构-03-NFS
NFS 目录 NFS NFS基本概述 NFS应用场景 NFS实现原理 NFS总结 NFS服务端安装 环境准备 服务端安装NFS 服务端NFS配置 服务端开机自启 服务端验证配置 NFS客户端挂载卸载 ...
- 整数划分(硬币问题)(dp)
题目描述 考试时思路 本菜狗考试的时候,第一扁打了纯dfs,15分拿了9分 后面看了时限400ms,多组数据,以为会卡常数,然后就想着先dp打表然后再直接O(1)查询 后面发现自己想多了,数据有点水- ...
- Mysql中varchar类型的猫腻!
varchar的存储规则 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节). 5.0版本以上,varchar(20),指的是20字符,无论存 ...
- 接口的不同写法在Swagger上的不同
接口请求方法类型 (1) 如果接口没有指定请求的 method 类型,例如 GET.POST.PUT.DELETE 等. Swagger中 (2)指定了请求方法后 Swagger中就只有一个GET请求 ...
- 镜像批量迁移利器:image-transfer
概述 用户业务在上云或者云迁移过程中,需要对镜像进行批量迁移.基于此背景,腾讯云容器专家团队开发了镜像批量迁移工具:image-transfer.该工具支持多种云厂商镜像仓库之间的批量迁移,同时支持腾 ...
- Nginx+FFmpeg实现RTSP转RTMP
RTSP转RTMP 本次转流采用Centos+Nginx+FFmpeg实现,具体实现如下: 1. 安装Ngxin 安装详细略(可以选择安装阿里的Tengine,官方[下载路径](Download - ...
- 服务器报错"您的主机中的软件中止了一个已建立的连接"
网上很多的说法都模棱两可,只是说和远程连接有关,这个说的太泛泛了. 我现在遇到的问题是java web出现的, 执行表单提交的时候出现该错误,原因是ajax和表单同时提交导致的, 相信很多朋友用了aj ...