最佳JPEG图像压缩质量

时间:2012-04-12 13:12:43

标签: actionscript-3 compression

我正在将bitmapData编码为JPG。什么是良好的压缩率,在不损失整体图像质量的情况下实现更小的文件大小? (我正在寻找适用于任何图像的解决方案)

2 个答案:

答案 0 :(得分:5)

因此,我尝试以最理论的方式回答您的问题,并解释为什么难以推荐单一的压缩率( all ) >案件。

首先,你必须至少对有损压缩和无损压缩之间的差异有一个模糊的理解。

有损与无损

无损压缩是一种压缩算法,它采用一组数据,将其转换为另一组较小的数据。反转过程应该产生与预压缩数据完全相同的数据集。另一方面,有损压缩不会。

使用有损压缩,允许算法丢弃它认为不需要重建原始消息的信息,但不保证重建完全相同的消息。

让我们看一个假设的例子来说明这一点。让我们说我已经提出了一种压缩英文文本的算法方法。我有一个名为A的失败编解码器和一个名为B的有损编解码器。假设我想压缩以下短语:

  鲍勃去商店买牛奶。

通过编解码器A运行该短语,然后将其解压缩,我会得到:

  鲍勃去商店买牛奶。

但是,通过压缩率为10的编解码器B运行相同的消息,我可能会回复以下短语:

  鲍勃去商店买牛奶。

请注意,结果并不相同,但非常接近。消息的完整性保持不变,但它与我输入系统的信息不同。

现在让我们通过编解码器B运行源消息,压缩率为5.这次,当我尝试解码压缩消息时,我可能会得到以下信息:

  鲍勃去商店寻找食物。

请注意,缺少更多信息,但邮件的隐含意图仍然存在。但是我不知道,什么样的食物鲍勃去了商店。

最后,让我们通过编解码器B以压缩率1运行源消息。这次我可能会回来:

  鲍勃不在这里。

这次算法已经确定Bob已经离开的地方并不重要,只有Bob不在当前位置。原始消息的核心意图仍然保留,但其余的上下文已经丢失。

同样的理论适用于图像。 JPEG压缩通过算法丢弃数据,它不认为有必要重建图像。

那么JPEG实际上是如何工作的?

JPEG实际工作的过程充满了复杂的数学,但在更高的层次上它很容易理解。它的工作原理是将图像分解成小的8x8像素块。然后它将像素集合中的像素转换为数学公式的集合(DCT-II,如果您感兴趣的话),然后通过分析这些公式,看看它可以根据给定的压缩率省略哪些公式。

在维基百科上有一篇关于DCT文章所涉及的数学的一个很好的视觉例子。

DCT at work

注意它是如何构建字母" A"通过将一组简单的图案块(由余弦生成)混合在一起。

现在,您会注意到 - 如果您看到的图像足够接近 - 有一堆非常接近零的系数,例如+0.006+0.021。而且你会注意到,如果你仔细观察,它们对左边结果图像的影响相当小。最简单的解释是:JPEG压缩通过抛弃小值来实现,实际上不计算它们。因此,当重新构建图像时,通过反转过程(iDCT / DCT-III),它不会添加或减少块的这些细微变化。它只存储/使用对最终块影响最大的那些。

压缩率越低,它试图扔掉的越多。压缩率越高,它就越努力保持。

现在在这个阶段会有更多微妙的数学,但这是最简单的例子。

这一切意味着什么?!

这意味着压缩器试图摆脱的信息是直接依赖在您尝试压缩的图像上。有些图像比其他图像更容易压缩而不显示视觉伪像,这仅仅是由于块的结构和它们包含的信息。

还要考虑压缩效果取决于正在查看它。我经常使用图像(无论是大学还是专业),并花了很多时间研究JPEG / MPEG的基础压缩机制,因此我很容易发现压缩工件,因为我知道我在寻找什么对于。但那些相同的文物可能不会被不那么敏锐的眼睛所接受。 (就像有些人不能听MP3压缩文件一样,因为他们可以在工作中听到压缩算法)

因此,您的里程可能会有所不同,具体取决于您尝试执行的操作以及您尝试压缩的图像。如果您对基础数学有一个很好的理解,那么根据您尝试压缩的图像,您可能能够根据压缩比预测什么会给你带来最好的最佳爆炸效果。 。但大多数时候,它只是实验的产物。

TL; DR

60%到80%之间的压缩率通常可以减小尺寸,但不会引入太多明显的视觉伪像。

答案 1 :(得分:0)

您使用的压缩在很大程度上取决于图像以及您将使用它的内容。无论何时将图像保存为JPG,您都会失去永远无法获得的质量,压缩程度越高,您丢失的质量就越高。

你需要问问自己:

  • 图像将如何使用?
  • 看起来有多好?
  • 我想节省空间吗?如果是这样,多少钱?如果没有,JPG压缩的目标是什么?

如果你有一堆大的,高分辨率的图像,你想要缩小以供网络使用,你最好调整图像大小而不是降低质量。

如果我更了解你想要完成什么,以及你正在使用什么样的图像,我可以给你我个人意见。最后,它确实取决于图像和使用情况。