如何从jpeg图像中读取嵌入缩略图?

时间:2009-08-25 01:36:36

标签: c++ jpeg thumbnails exif

我正在用c ++编写缩略图查看器。

我首先使用EXIF信息来检索图像的缩略图,但EXIF中的缩略图很糟糕,带有黑色条带。所以我想获得jpeg的嵌入式缩略图,我该怎么做?

另一个问题: jpeg的嵌入缩略图是否等于EXIF thumbnial?

4 个答案:

答案 0 :(得分:6)

如果EXIF缩略图不好,您可以从JPEG本身生成自己的缩略图,而无需完全解码JPEG。

查找 EPEG 的源代码。它是SourceForge上Enlightenment项目的一部分,并且是一年前旧EFL的一部分。你仍然可以从一些旧的SVN提交或者可能浮动的源tarball中挖掘它。

基本上,EPEG所做的是,它从图像中收集DCT系数,并对它们执行重新缩放操作。 DCT系数通常用作8×8像素块的基本系数。您可以将其视为一个像素。因此,您的(缩略图)缩略图恰好是原始图像大小的1/8。像对待任何图像数据一样将其重新缩放到所需的尺寸。

答案 1 :(得分:2)

在大多数人们谈论具有缩略图的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了解详情。

答案 2 :(得分:0)

最快和推荐的方式是图书馆。

例如,www.exiv2.org可以为您提供嵌入式缩略图和EXIF信息提取的库。有很多选择,但我认为这是一个很好的解决方案。

答案 3 :(得分:-1)

我眼中的www.exiv2.org是一个糟糕的解决方案。其他项目的代表太多了。例如Expat和zlib。如果您想提供一个可以自己支持的轻量级解决方案,我建议您编写自己的EXIF解码器。