前情概要(/t/835906):
本科毕设,用 Java 从零开始写一个 JPEG 编码器,v 友们的回答使我受益匪浅。
目前转换 YCC 、DCT 、量化已经完成,用 ISO/IEC 10918-1:1993 中 K.3 推荐的 Huffman 表,可以完美运行。
然而,用固定的 Huffman 表压缩效果不一定是最好的,所以我打算根据单个图片本身生成一个新的表。
单个图片中,并不是所有 Run/Size 值都用得到,所以我只打算给用到的值分配 Huffman 编码。
(虽是变长编码,由于 JPEG 限制码长不得超过 16bit ,分配过多会导致权重大的值码长增加)
解码测试结果:
- macOS 预览(错误:它可能已损坏,或者可能使用了“预览”无法识别的文件格式。)
- libjpeg (错误:Bogus Huffman table definition )
- ffmpeg (成功,使用 ffplay 图片可以正常显示)
疑问:
- 可不可以,对没有出现的值,不分配 Huffman 编码;
- 如果可以不分配编码,是不是 libjpeg 解码器的 bug ;
(如果 libjpeg 没问题,就是我的 bug )
和 libjpeg 比,我这个只是一个小玩具。但是本着敢于质疑的精神,提出了这个问题,希望有懂 JPEG 的大神解惑,非常感谢!
