如何从零开始编写JPEG文件解码器

20

我知道已经有很多这方面的工具了。我的目标是学习。 我可以使用fopen()函数读取JPEG文件,而且我知道它是一个二进制文件。 那么接下来呢?我知道我可以学习JPEG规格说明,但是似乎并没有说明二进制JPEG文件的结构。

这个文件包含了0和1. 如何转换它或者如何知道哪一串比特代表什么?

我找到了这个例子:nano jpeg解码器, 但是它的代码很难读懂。

提前感谢。

PS:这个普林斯顿大学的人做过一份相关的项目,提供了一个很好的参考。


这个结构看起来相当松散。我希望能听到那些有深入了解这种格式的工作经验的人的答案。 - luser droog
普林斯顿的链接已经失效了。猜测他们已经毕业了... - John C
2
普林斯顿大学的这位毕业生完成了他的项目,现在可以在他的网站上找到PDF文件:http://www.ctralie.com/PrincetonUGRAD/Projects/JPEG/jpeg.pdf - Optimized Coder
2个回答

30
这个页面提供了大量处理jpeg文件的信息。此外,你可以看看我自己尝试用Python编写JPEG解码器
程序中使用的短变量名通常直接对应于标准中的变量。因此,如果您已经准备好标准,它会非常有帮助。标准称为ITU-1150,可以在互联网上免费获得。

1
通过将您的Python代码视为伪代码,这可能正是OP所需要的。 - luser droog
@luser 这是我最初编写它的动机。我会用Python进行原型设计,然后翻译成C,但我从来没有去做。 :) - onemasse
如果你能用一些随意的评论来解释这段代码,那将会赢得奖励。可能还有接受的机会,如果楼主再次回来检查的话 :) - luser droog
程序中的短变量名通常直接对应于标准中的变量。因此,如果您已经准备好了标准,它会帮助很多。它被称为ITU-1150,并且可以在互联网上免费获取。我不记得具体位置了,但我会尝试今晚上传一份带有注释的版本。 - onemasse
我已经添加了一些文档,但它并不完整。其余的留作练习。 - onemasse
看起来不错。赏金归你了。如果你把这些评论中的一些融入到答案中,那就更好了。如果有超过几个评论,SO并不总是会显示所有评论。 - luser droog

14

JPEG是一个有点棘手的图像格式,如果你刚开始接触,需要处理哈夫曼表,拥有某种快速的离散余弦变换函数以及解释量化表的能力。

http://en.wikipedia.org/wiki/JPEG 是相当有帮助的。

如果你想从更简单的东西开始,可以看一下 PNG 格式。这种格式基本上由头部、一堆可变长度的块以及 Zlib 流组成。解压后留下的几乎是原始像素,但它们被过滤了。反过滤很容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接