python中打开的JPEG二进制字节流中的字符是什么意思?

问题描述 投票:0回答:1

在我学过的教程中,JPEG文件的组成只是二进制系统。但是当我使用python打开JPEG文件时,文件的内容并不像教程那样规则。 我希望看到的JPEG文件的内容是这样的:\xff\xd8\xff\xe0\x00\x10... 但实际上,它是这样的:\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00C\x00\x08 \x06\x06\x07\x06\x05\x08\x07\x07\x07 为什么会有JFIF、C等字符? enter image description here enter image description here

我希望我能弄清楚,并小规模地修改这个JPEG文件。

jpeg
1个回答
0
投票

有效的 JPEG 文件必须以图像开始 (SOI) 标记 0xff、0xd8 开头,并且必须包含霍夫曼表和量化表以及压缩图像数据。它还可以包含其他一些可选内容 - 相机中的许多 JPEG 都会嵌入缩略图。裸露的 JPEG 文件不需要太多的标头信息,但它绝对必须以 SOI 开头。

理论上它也应该以 EOI 结尾,但只有最严格的解码器才会对此挑剔。

第二项 0xff、0xe0 用于特定于应用程序的元数据,它允许打开文件的程序知道它正在处理什么类型的 JPEG - 在本例中为JFIF。它指定 JPEG 文件交换格式。

所有各种 JPEG 标记的完整列表位于 Wiki 上

最常见的两种 JPEG 文件类型是 [Exif] (https://en.wikipedia.org/wiki/Exif) 0xff、0xe1,来自大多数现代相机和较旧的 JFIF。

有些还可以包含评论。过去这里有关于创建尽可能最小的有效 JPEG 图像文件的线程 - 使用深奥且罕见的算术编码选项。

解析 JPEG 文件中的标记和嵌入字符串是一个有趣的编程练习。我建议尝试一下 NASA 或 HST 网站上的一个,因为它们有时会隐藏一些有趣的备用缩略图。

如果您想了解有关 JPEG 内部结构的更多详细信息,那么 Miano 的书 “压缩图像文件格式” 是一个不错的介绍,并且比 JPEG 标准文档更容易访问。

© www.soinside.com 2019 - 2024. All rights reserved.