JPEG解码——(1)JPEG文件格式概览 - OnlyTime_唯有时光

Dreaming-in-Gottingen 2021-11-01 原文


JPEG解码——(1)JPEG文件格式概览

  由于懒和人的忘性,以前做的一些笔记再回过头看时又有些生疏了,我决定把一些内容整理出来,以供有需要的来参考。

了解的人知道其价值所在,不知道的人就弃之如废物吧。

  本篇是JPEG解码系列的第一篇——JPEG文件格式概览。

1. 图片文件的数据是什么?

  这是一幅人眼可视的图片

  

  这是其对应的二进制数据:(由于二进制数据量浩如烟海,只截取头部的一些数据,使用的工具是WinHex)

  

 2. 为什么需要文件格式来表达图像?

  这就凸显了规范的重要性,使用同一套标准,各厂商都按照这个标准进行文件格式封装,那么你拿到别人的照片后就知道

了如何进行(文件格式)解析和(jpeg)解码了。

  这也好理解,不同国家不同语言的人们如何交流?使用通用的标准——英语。

  jpeg文件格式也自有其标准,文件格式标准参考电联的JFIF,编解码标准参考电联的ITU-T81。

3. 标准文档太长,没耐心读下去,怎么办?

  标准规范的页码都是很长的,用于照顾到各个角落和细节。

  但是,各个厂商实现时,肯定不会实现规范的全部内容,只需满足标准中最重要的一部分即可。

4. jpeg二进制数据解读

  一般情况下,是按照这个顺序排列的:

TAG类型 数值 名称 其他备注
SOI 0xFFD8 Start of Image 必带
APP0 0xFFE0 application0 必带
APPn 0xFFEn applicationn 可选带(APP1一般为Exif信息)
DQT 0xFFDB Define Quantization Table 必带
SOF 0xFFC0 Start of Frame 必带
DHT 0xFFC4 Define Huffman Table 必带
SOS 0xFFDA Start of Scan 必带
compress data 。。。 。。。 必带
EOI 0xFFD9 End of Image 必带

 

 

 

 

 

 

 

 

 

 

 

 

  如下为标注各种类型TAG,其中EOI在文件末尾未贴出来:

  

5. 关于各TAG的一些说明

  5.1) 文件名末尾.jpg不代表真的是一个jpeg图片,因为你可以随意更改一个文件的后缀名。

  5.2)JPEG文件必须以0xFF DB开头和以0xFF D9结尾。

  5.3)DQT为量化表,该类型表有两个表,一个表示Y分量的量化表,另外一个为UV分量共用的量化表。

    其中,TAG后面的0x 00 43表示这个TAG组中除去TAG两个字节外,共有多少个字节组成,后面的0x00为第几张表。

    量化表为DCT变换系数,由于是8×8的二维DCT变换,故系数个数为64,这也即是:0x43 – 3 = 0x40 = 64。

  5.4)SOF为帧图像开始,记录了采样精度、图形宽/高、分量个数、水平/垂直采样因子、量化表号等信息。

        例如,摘抄下SOF下的这几个字节:0x00 11 08 02 D0 03 E0 03 01 22 00 02 11 01 03 11 01

       其中,0x00 11代表SOF下共有17字节;

       0x08代表采样精度,几乎都是用8位进行采样精度,即一个像素点可以有2^8=256级过渡;

       0x02 D0代表图像高,即0x02d0=720像素高;

       0x03 E0代表图像宽,即0x03E0=992像素宽;

       0x03代表分量表数,为3,分别代表Y、U和V的表;

       0x01 22 00中第一个字节01代表量化表序号(从1开始),第二个22代表水平/垂直采样因子(高四位为水平采样因子,第四位为垂直采样因子),第三个00代表量化表id=0;

       0x02 11 01中第一个字节01代表量化表序号为2,第二个11代表水平/垂直采样因子都为1,第三个00代表量化表id=1;

       0x03 11 01中第一个字节01代表量化表序号为3,第二个11代表水平/垂直采样因子都为1,第三个00代表量化表id=2;

    需要补充说明一下,采样因子和量化表的问题。

    采样因子:该图象的Y分量的宽/高采样因子都为2,而UV分量的采样因子都为1,则在同一个方向上(水平或垂直方向),Y分量采样点是UV分量采样点的2倍,

         如果图像Y分量宽高分别W和H,那么U和V分量只采样了W/2和H/2个点,这也代表原始图象的size=1.5*W*H。

         有些图像的第一张表可能是2和1或1和2,再或都是1,但是第二和第三张表的采样因子都是1。

    量化表:Y分量使用一张量化表,UV分量使用另外一张表,因为DQT表一般就两张。

  5.5)DHT为霍夫曼表,由四个表组成,分表代表:

    [0][0]——直流霍夫曼表0,Y分量直流部分解码时使用

    [0][1]——直流霍夫曼表0,UV分量直流部分解码时使用

    [1][0]——交流霍夫曼表0,Y分量交流部分解码时使用

    [1][1]——交流霍夫曼表1,UV分量交流部分解码时使用

  5.6)SOS为扫描开始,其代表霍夫曼表关系进行映射。

  5.7)SOS后面就为真正的编码数据,这是数据的大头,相比于此,文件头的size其实是非常之少。

  5.8)EOI为图像结束的标志,图像必须以此结束。

发表于
2021-01-16 15:55 
OnlyTime_唯有时光 
阅读(844
评论(0
编辑 
收藏 
举报

 

版权声明:本文为Dreaming-in-Gottingen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Dreaming-in-Gottingen/p/14285605.html

JPEG解码——(1)JPEG文件格式概览 - OnlyTime_唯有时光的更多相关文章

  1. 由程序员砍产品经理新闻引起的随想 – 王景

        最近看到深圳的一条新闻,程序员砍产品经理新闻,这是什么仇什么怨,才能有这么大恨。     后来又看到朋 […]...

  2. 七款非常好用的电脑数据恢复软件推荐 – 银龙科技

    七款非常好用的电脑数据恢复软件推荐 目前网络上有非常多的数据恢复软件供用户选择,但不同版本的数据恢复软件使用功 […]...

  3. java接口自动化(三) – 手工接口测试到自动化框架设计之鸟枪换炮

    1.简介   上一篇宏哥介绍完了接口用例设计,那么这一章节,宏哥就趁热打铁介绍一下,接口测试工具。然后小伙伴们 […]...

  4. 《人在囧途》系列 – 我30岁了,转行学编程可以吗? 排除法告诉你答案

    1. 简介   最近分享技术类的文章有点频繁,想必大家都有点腻了吧!今天给大家换个口味,换个话题。毕竟变则通, […]...

  5. Linux查看shell类型 – 红山玉龙

    Linux查看shell类型 原文链接:http://babybandf.blog.163.com/blog/ […]...

  6. 悄摸直播 —— JavaCV实现本机摄像头画面远程直播

    悄摸直播 —— JavaCV实现本机摄像头画面远程直播 最近想用Java实现一个类似于远程直播的功能 像这样: […]...

  7. 从零到一快速搭建个人博客网站(域名备案 + https免费证书)(一)

    前言        为什么选择搭建个人博客?一方面是各个平台经常下架原创文章,另一个方面是为了熟悉整个建站流程 […]...

  8. OpenOffice前途惨淡,我们还有其它选择吗? – 岚之山

    OpenOffice前途惨淡,我们还有其它选择吗?     随着甲骨文收购SUN,OpenOffice的前景让 […]...

随机推荐

  1. Android-完全退出当前应用程序的四种方法

    Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接 […]...

  2. VB TreeView控件使用详解

    来源:http://www.newxing.com/Tech/Program/VisualBasic/Tree […]...

  3. 搜索引擎分析系列2-搜索引擎工作的基础流程与原理 – 风之泪

    搜索引擎分析系列2-搜索引擎工作的基础流程与原理     上一章搜索引擎分析系列1-百度数据库物理结构分析,本 […]...

  4. CountDownLatch原理分析

    本文承接上一篇文章:AQS-共享模式分析 概述   CountDownLatch是一个同步计数器,他允许一个或 […]...

  5. 世预赛首发焦点解析:里皮的思路你能懂?

    [世预赛] 马尔代夫vs中国 开赛时间:2019-09-10 23:00 看到很多帖子说,在此前的训练中,里皮 […]...

  6. CSS,XTHML书写规范以及常见问题总结

    文件介绍 文件名  CSS,XHTML及常见问题总结.doc 内容 CSS,XHTML及常见问题总结 版本 1 […]...

  7. 菜鸟变大神,测试人才的逆袭之路就靠它了!

    时光荏苒,从毕业到现在已经 10年,10年来一直从事着软件测试的工作。从一个什么都不会,到测试开发工程师,期间 […]...

  8. vs2013 中如何如何让html页面的设计视图显示

    1.工具 -选项-文本编辑器-文件扩展名-html-HTML(Web窗体)编辑器 2.在解决方案管理器中找到一 […]...

展开目录

目录导航