我正在用 C++ 编写缩略图查看器。
我首先使用 EXIF 信息来检索图像的缩略图,但是 EXIF 中的缩略图很糟糕,带有黑色条纹。所以我想得到jpeg的嵌入缩略图,我该怎么做呢?
另一个问题:jpeg 的嵌入缩略图是否等于 EXIF 缩略图?
我正在用 C++ 编写缩略图查看器。
我首先使用 EXIF 信息来检索图像的缩略图,但是 EXIF 中的缩略图很糟糕,带有黑色条纹。所以我想得到jpeg的嵌入缩略图,我该怎么做呢?
另一个问题:jpeg 的嵌入缩略图是否等于 EXIF 缩略图?
如果 EXIF 缩略图不好,您可以从 JPEG 本身生成自己的缩略图,而无需完全解码 JPEG。
寻找EPEG的源代码。它是 SourceForge 上 Enlightenment 项目的一部分,并且是一年前旧 EFL 的一部分。您仍然可以从一些旧的 SVN 提交或可能漂浮的源 tarball 中挖掘它。
基本上,EPEG 所做的是从图像中收集 DCT 系数,并对它们执行重新缩放操作。DCT 系数通常用作 8x8 像素块的基本系数。您可以将其视为一个像素。结果,您有一个(无需计算)缩略图,正好是原始图像大小的 1/8。像将任何图像数据重新缩放到所需的尺寸一样。
在大多数情况下,人们谈论带有缩略图的 JPEG 文件,他们的意思是该文件是 JPEG-EXIF 并且 EXIF 数据包含一个缩略图图像。
但是,确实可以说JFIF 1.02支持缩略图。缩略图可以存储在 JFIF APP0 标记或官方 JFXX APP0 扩展标记中;缩略图可能是未压缩的 RGB、JPEG 或托盘。有关详细信息,请参阅 http://en.wikipedia.org/wiki/JPEG_File_Interchange_Format#JFIF_segment_format。
最快和推荐的方法是库。
例如,www.exiv2.org可以为您提供嵌入缩略图和 EXIF 信息提取的库。有很多替代方案,但我认为这是一个很好的解决方案。
在我看来,www.exiv2.org 是一个糟糕的解决方案。其他项目的部门太多了。例如,Expat 和 zlib。如果您想提出一个可以自己支持的轻量级解决方案,我建议您编写自己的 EXIF 解码器。