2010-03-23 43 views
7

我正在制作一个程序,可以动态创建JPEG图像的缩略图。现在我在想:由于JPEG图像是由8x8像素块(Wikipedia has a great explanation)构建而成的,因此是否有可能跳过部分解码?在解码过程中调整JPEG图像大小

假设我的缩略图至少比原始图像小8倍。然后我们可以通过只包含离散余弦变换的常数项,将输入文件中的每个8x8块映射到解码输出中的1个像素。大部分图像数据可以立即丢弃,无需处理。此外,内存使用量减少了64倍。

我不想从零开始实现这个功能;这将很容易需要一个星期。有没有代码可以做到这一点?

如果不是,这是因为这种方法不值得,或者仅仅因为没人想到它呢?

+0

'libjpeg'已经可以做到这一点,您可以在**加载之前通过设置图像大小**来在ImageMagick中使用此功能。 –

回答

4

我认为djpeg's scale功能可以做到这一点。

它可以将8x8块缩放到1和16像素之间的任何大小。

“这很有趣,因为可以直接从JPEG(DCT)数据中检索不同的空间大小输出,而无需单独完整解码和空间重采样。”

+0

正是我在找的东西,它也在一个适当授权的主流图书馆里。谢谢! – Thomas

0

我正在使用的项目目前使用ImageGen,它可以动态调整各种图像大小 - 如果功能列表匹配您想要的功能,这可能会付出代价。否则,我想你正在寻找在图像上实现有损文件压缩,其中必须已经完成!

2

根据this answer,EPEG来自Enlightenment所做的正是这一点,通过收集DCT系数将图像缩小8倍。这里是current home of EPEG

+1

我希望我能接受两个答案,但唉,只能有一个。尽管如此。 – Thomas