jpeg了解
JPEG是一个压缩标准,又可分为标准 JPEG、渐进式JPEG及JPEG2000三种:
①标准JPEG:以24位颜色存储单个光栅图像,是与平台无关的格式,支持最高级 别的压缩,不过,这种压缩是有损耗的。此类型图片在网页下载时只能由上而下依序显示图片,直到图片资料全部下载完毕,才能看到全貌。
②渐进式 JPEG:渐进式JPG为标准JPG的改良格式,支持交错,可以在网页下载时,先呈现出图片的粗略外观后,再慢慢地呈现出完整的内容,渐进式JPG的文件 比标准JPG的文件要来得小。
③JPEG2000:新一代的影像压缩法,压缩品质更好,其压缩率比标准JPEG高约30%左右,同时支持有损 和无损压缩。一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,让图像由朦胧到清晰显示。
以一幅24 位彩色图像为例,JPEG的压缩分为四个步骤:
①颜色转换:在将彩色图像进行压缩之前,必须先对颜色模式进行数据转换。转换完成之后 还需要进行数据采样。
②DCT 变换:是将图像信号在频率域上进行变换,分离出高频和低频信息的处理过程,然后再对图像的高频部分(即图像细 节)进行压缩。首先以象素为单位将图像划分为多个8×8的矩阵,然后对每一个矩阵作DCT 变换。把8×8的象素矩阵变成8×8的频率系数矩阵(所谓频率 就是颜色改变的速度),频率系数都是浮点数。
③量化:由于下面第四步编码过程中使用的码本都是整数,因此要对频率系数进行量化,将之转换为整 数。数据量化后,矩阵中的数据都是近似值,和原始图像数据之间有了差异,这一差异是造成图像压缩后失真的主要原因。这一过程中,质量因子的选取至为重要。 值选得大,可以大幅度提高压缩比,但是图像质量就比较差,质量因子越小图像重建质量越好,但是压缩比越低。
④编码:编码是基于统计特性的方 法。
四个步骤都完成后的JPEG文件,其基本数据结构为两大类型:“段”和经过压缩编码的图像数据。
二、数 据结构
1.段的一般结构如下表所示:
表1:段的一般结构
-----------------------------------------------------------------
名 称 字节数 数据 说明
-----------------------------------------------------------------
段 标识 1 FF 每个新段的开始标识
段类型 1 类型编码(称作“标记码”)
段长 度 2 包括段内容和段长度本身,不包括段标识和段类型
段内容 ≤65533字节
-----------------------------------------------------------------
说明:
①JPG 文件中所有关于宽度高度长度间隔这一类数据,凡是>1字节的,均采用Motorola格式,即:高位在前,低位在后。
② 有些段没有长度描述也没有内容,只有段标识和段类型。文件头和文件尾均属于这种段。
③段与段之间无论有多少FF都是合法的,这些FF称为“填充字 节”,必须被忽略掉。
2.段类型有30种,但只有10种是必须被所有程序识别的,其它的类型都可以忽略。所以下面只列出这 10种类型。
表2:段类型
---------------------------------------
名称 标 记码 说明
---------------------------------------
SOI D8 文件头
EOI D9 文 件尾
SOF0 C0 帧开始(标准 JPEG)
SOF1 C1 同上
DHT C4 定 义 Huffman 表(霍夫曼表)
SOS DA 扫描行开始
DQT DB 定义量化表
DRI DD 定 义重新开始间隔
APP0 E0 定义交换格式和图像识别信息
COM FE 注释
-----------------------------------------------------------
说明:有的文章也将DNL段(标记码=DC,定义扫描行数)列为必须段。
3.以下按一般JPEG文件的段排列顺序详细介绍 各种段的结构:
表3:SOI(文件头)
-----------------
名称 字节数 值
-----------------
段 标识 1 FF
段类型 1 D8
-----------------
说明:这两个字节构成了 JPEG文件头。
表4:APP0(图像识别信息)
--------------------------------------------------------------------------
名 称 字节数 值 说明
--------------------------------------------------------------------------
段 标识 1 FF
段类型 1 E0
段长度 2 0010 如果有 RGB缩略图就=16+3n
(以下为段内容)
交换格式 5 4A46494600 “JFIF”的ASCII码
主 版本号 1
次版本号 1
密度单位 1 0=无单位;1=点数/英 寸;2=点数/厘米
X像素密度 2 水平方向的密度
Y像素密 度 2 垂直方向的密度
缩略图X像素 1 缩略图水平像素数目
缩 略图Y像素 1 缩略图垂直像素数目
(如果“缩略图X像素”和“缩略图Y像素”的值均>0,那么才有下面的数 据)
RGB缩略图 3×n n=缩略图像素总数=缩略图X像素×缩略图Y像素
--------------------------------------------------------------------------
说明:
①JFIF是JPEG File Interchange Format的缩写,即JPEG文件交换格式,另外还有TIFF等格式,很少 用
②“如果有RGB缩略图就=16+3n”是什么意思呢?比如说“缩略图X像素”和“缩略图Y像素”的值均为48,就表示有一个48×48像素的 缩略图(n=48×48),缩略图是24位真彩位图,用3个字节来表示一个像素,所以共占用3n个字节。但大多数JPG文件都没有这个“鸡肋”缩略图。
表 5:COM(注释)
--------------------------------------------------------------------------
名 称 字节数 值 说明
--------------------------------------------------------------------------
段 标识 1 FF
段类型 1 FE
段长度 2 其值=注释字符的字节数+2
段 内容 注释字符
--------------------------------------------------------------------------
说明:有的JPEG文件没有这个段。
第1楼
|
三、实例分析
用系统自带的画图程序画一个32×24的红色方块,另存为JPG文件,这个文件的全部数据如下:
0000: FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 60
0010: 00 60 00 00 FF DB 00 43 00 08 06 06 07 06 05 08
0020: 07 07 07 09 09 08 0A 0C 14 0D 0C 0B 0B 0C 19 12
0030: 13 0F 14 1D 1A 1F 1E 1D 1A 1C 1C 20 24 2E 27 20
0040: 22 2C 23 1C 1C 28 37 29 2C 30 31 34 34 34 1F 27
0050: 39 3D 38 32 3C 2E 33 34 32 FF DB 00 43 01 09 09
0060: 09 0C 0B 0C 18 0D 0D 18 32 21 1C 21 32 32 32 32
0070: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
0080: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
0090: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 FF C0
00A0: 00 11 08 00 18 00 20 03 01 22 00 02 11 01 03 11
00B0: 01 FF C4 00 1F 00 00 01 05 01 01 01 01 01 01 00
00C0: 00 00 00 00 00 00 00 01 02 03 04 05 06 07 08 09
00D0: 0A 0B FF C4 00 B5 10 00 02 01 03 03 02 04 03 05
00E0: 05 04 04 00 00 01 7D 01 02 03 00 04 11 05 12 21
00F0: 31 41 06 13 51 61 07 22 71 14 32 81 91 A1 08 23
0100: 42 B1 C1 15 52 D1 F0 24 33 62 72 82 09 0A 16 17
0110: 18 19 1A 25 26 27 28 29 2A 34 35 36 37 38 39 3A
0120: 43 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A
0130: 63 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A
0140: 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99
0150: 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7
0160: B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5
0170: D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7 E8 E9 EA F1
0180: F2 F3 F4 F5 F6 F7 F8 F9 FA FF C4 00 1F 01 00 03
0190: 01 01 01 01 01 01 01 01 01 00 00 00 00 00 00 01
01A0: 02 03 04 05 06 07 08 09 0A 0B FF C4 00 B5 11 00
01B0: 02 01 02 04 04 03 04 07 05 04 04 00 01 02 77 00
01C0: 01 02 03 11 04 05 21 31 06 12 41 51 07 61 71 13
01D0: 22 32 81 08 14 42 91 A1 B1 C1 09 23 33 52 F0 15
01E0: 62 72 D1 0A 16 24 34 E1 25 F1 17 18 19 1A 26 27
01F0: 28 29 2A 35 36 37 38 39 3A 43 44 45 46 47 48 49
0200: 4A 53 54 55 56 57 58 59 5A 63 64 65 66 67 68 69
0210: 6A 73 74 75 76 77 78 79 7A 82 83 84 85 86 87 88
0220: 89 8A 92 93 94 95 96 97 98 99 9A A2 A3 A4 A5 A6
0230: A7 A8 A9 AA B2 B3 B4 B5 B6 B7 B8 B9 BA C2 C3 C4
0240: C5 C6 C7 C8 C9 CA D2 D3 D4 D5 D6 D7 D8 D9 DA E2
0250: E3 E4 E5 E6 E7 E8 E9 EA F2 F3 F4 F5 F6 F7 F8 F9
0260: FA FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00 E2
0270: E8 A2 8A F9 93 F7 10 A2 8A 28 00 A2 8A 28 00 A2
0280: 8A 28 03 FF D9
分 析:
0000-0001:FF D8(文件头)
0002-0013:APP0段,其中:
0002-0003:FF E0(段 标记)
0004-0005:00 10(段长度=16字节)
0006-000A:4A 46 49 46 00(“JFIF”的 ASCII码)
000B-000C:01 01(主次版本号=1.01)
000D :01(密度单位为 点数/英寸)
000E-0011:00 60 00 60(水平和垂直的密度均为每英寸96像素)
0012-0013:00 00(没有缩略图)
0014-0058:DQT 段,其中:
0014-0015:FF DB(段标记)
0016-0017:00 43(段长度=67字节)
0018 :00(QT号=0,QT精度=8bit)
0019-0058:QT
0059-009D:DQT段,其中:
0059-005A:FF DB(段标记)
005B-005C:00 43(段长度=67字节)
005D :01(QT号=1,QT精度=8bit)
005E-009D:QT
009E-00B0:SOF0段,其中:
009E-009F:FF C0(段标记)
00A0-00A1:00 11(段长度=17字节)
00A2 :08(样 本精度=8bit)
00A3-00A6:00 18 00 20(图像高=24,图像宽=32)
00A7 :03(组件 数量=3,YCbCr彩色图)
00A8 :01(ID号=1,这是亮度Y组件)
00A9 :22(化为二进 制=00100010,表明垂直和水平采样系数均=2)
00AA :00(使用QT号=0的量化表)
00AB :02(ID号=2,这是色度Cb组件)
00AC :11(化为二进制=00010001,表明垂直和水平采样系 数均=1)
00AD :01(使用QT号=1的量化表)
00AE :03(ID号=3,这是色度Cr组件)
00AF :11(化为二进制=00010001,表明垂直和水平采样系数均=1)
00B0 :01(使用QT号=1的量 化表)
00B1-00D1:DHT段,其中:
00B1-00B2:FF C4(段标记)
00B3-00B4:00 1F(段长度=31字节)
00B5 :00(HT号=0,DC表)
00B6-00C5:这 16个数字之和=12,说明下面的HT值表的长度=12字节)
00C6-00D1:HT值表
00D2-0188:DHT段,这是HT 号=0的AC表,参照上面分析
0189-01A9:DHT段,这是HT号=1的DC表,参照上面分析
01AA-0260:DHT段,这是 HT号=1的AC表,参照上面分析
0261-026E:SOS段,其中:
0261-0262:FF DA(段标记)
0263-0264:00 0C(段长度=12字节)
0265 :03(组件数量=3)
0266-0267:01 00(组件ID=1,Y组件,使用HT表号=0的AC表)
0268-0269:02 11(组件ID=2,Cb组 件,使用HT表号=1的DC表)
026A-026B:03 11(组件ID=3,Cr组件,使用HT表号=1的DC表)
026C-026E:00 3F 00(几乎每个JPG文件中这3个字节的值都相同,但用途不明)
026F-0282:图像压缩数据
0283-0284:FF D9(文 件尾)
jpeg了解的更多相关文章
- TJpgDec—轻量级JPEG解码器
TJpgDec-轻量级JPEG解码器 本文由乌合之众lym瞎编,欢迎转载blog.cnblogs.net/oloroso 下文中解码一词皆由decompression/decompress翻译而来. ...
- jpeg相关知识
一.jpeg介绍 JPEG 是 Joint Photographic Exports Group 的英文缩写,中文称之为联合图像专家小组.该小组隶属于 ISO 国际标准化组织,主要负责定制静态数字图像 ...
- JPEG文件结构
JPEG文件由八个部分组成,每个部分的标记字节为两个,首字节固定为:0xFF,当然,准许在其前面再填充多个0xFF,以最后一个为准.下面为各部分的名称和第二个标记字节的数值,用ultraedit的16 ...
- import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包
import com.sun.image.codec.jpeg.JPEGCodec; 在Eclipse中处理图片,需要引入两个包: import com.sun.image.codec.jpeg. ...
- PNG和Gif及JPEG图片格式比较
Gif格式特点 透明性Gif是一种布尔透明类型,既它可以是全透明,也可以是全不透明,但是它并没有半透明(alpha 透明). 动画Gif这种格式支持动画. 无损耗性Gif是一种无损耗的图像格式,这也意 ...
- jpeg库编译 - windows平台
一.准备: 下载最新的jpeg库源码:http://www.ijg.org/files/jpegsr9a.zip二.编译 1. 解压到指定目录 2. 打开VS2010命令行窗口(为了得到VS2010的 ...
- maven 编译项目时:报com.sun.image.codec.jpeg不存在
项目中用到图片处理相关的一些工具类,在eclipse开发工具内,程序并没有什么问题,都可以正常使用,项目也没有报错,但通过maven 进行编译打包时,则会报错: 程序包com.sun.image.co ...
- 解决canvas转base64/jpeg时透明区域变成黑色背景的方法
最近在工作遇到一个问题,在将png图片转jpeg时,透明区域被填充成黑色,通过网上的介绍找到了解决的方法,现在总结下分享给同样遇到这个问题的朋友们,感兴趣的可以通过本文详细学习下. 在用canvas将 ...
- 一款免费支持PDF、word、excel、PPT、jpeg之间互转线上软件
偶然发现的一款免费支持PDF.word.excel.PPT.jpeg之间互转,支持合并pdf.加密解密PDF的线上软件,首先声明,不是广告党,我自己试用过,确实是目前我用过最好用的,如果有朋友有更好的 ...
- 【图像处理】第三次实验:JPEG图像压缩
1.任务说明 将LENA图像用JPEG方式压缩. 2.算法原理 JPEG(Joint Photographic Experts Group)是一个由ISO和IEC两个组织机构联合组成的一个专家组,负责 ...
随机推荐
- Xcode中设置按钮在十分钟之内禁用
btn.enabled=NO;` NSTimer * notificationTimer = [NSTimer scheduledTimerWithTimeInterval:10*60.0 targe ...
- windows tomcat配置大全
Tomcat下JSP.Servlet和JavaBean环境的配置 第一步:下载j2sdk和tomcat:到sun官方站点()下载j2sdk,注意下载版本为Windows Offline Install ...
- laravel框架总结(一) -- 请求和响应
一.laravel请求 1.获取请求 1>获取请求的 URI path 方法会返回请求的 URI.所以,如果接收到的请求目标是 http://domain.com/foo/bar,那么 path ...
- php基础复习(一)smarty模板
一.基本配置第一步:下载smarty:官网www.smarty.net第二步:加载类文件和更改配置 1. //加载类文件 require_once '../libs/Smarty.class.php' ...
- 2016年12月11日 星期日 --出埃及记 Exodus 21:6
2016年12月11日 星期日 --出埃及记 Exodus 21:6 then his master must take him before the judges. He shall take hi ...
- 2016年11月10日 星期四 --出埃及记 Exodus 20:1
2016年11月10日 星期四 --出埃及记 Exodus 20:1 And God spoke all these words: 神吩咐这一切的话说,
- js动画 无缝轮播 进度条 文字页面展示 div弹窗遮罩效果
1.无缝轮播 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.a ...
- c#复习阶段
在控制台程序中使用结构体.集合,完成下列要求项目要求:一.连续输入5个学生的信息,每个学生都有以下4个内容:1.序号 - 根据输入的顺序自动生成,不需要手动填写,如输入第一个学生的序号是1,第二个是2 ...
- linux 开启wifi热点
1,在网络连接管理中创建一个wifi连接,点击 Add,然后选Wi-Fi 2,设置wifi热点名字.wifi接连名字 3,设置 Mode 选 Ad-hoc,其它默认. 4,在 Wi-Fi Securi ...
- 【Java】hashcode()和equals()
大家知道,在集合中判断集合中的两个元素是否相同,依赖的是hashcode()和equals()两个方法. > 一个简单的实验 public class Teacher { private Int ...