Uli*_*Uli 1 compression actionscript-3
我正在将bitmapData编码为JPG.什么是良好的压缩率,在不损失整体图像质量的情况下实现更小的文件大小?(我正在寻找适用于任何图像的解决方案)
所以,我试着用尽可能最理论的方式回答你的问题,并解释为什么很难(如果不可能的话)推荐一种在所有情况下都能很好地工作的压缩率.
首先,您必须至少对有损压缩和无损压缩之间的区别有一个模糊的理解.
无损压缩是一种压缩算法,它采用一组数据,将其转换为另一组较小的数据.反转过程应该产生与预压缩数据完全相同的数据集.另一方面,有损压缩不会.
使用有损压缩,允许该算法丢弃它认为不需要重建原始消息的信息,但不保证重建完全相同的消息.
让我们看一个假设的例子来说明这一点.让我们说我已经提出了一种压缩英文文本的算法方法.我有一个叫做的失败编解码器A和一个叫做有损编解码器B.让我们说我想压缩以下短语:
鲍勃去商店买牛奶.
通过编解码器运行短语A,然后解压缩,我会得到:
鲍勃去商店买牛奶.
但是,通过B压缩率为10的编解码器运行相同的消息,我可能会得到以下短语:
鲍勃去商店买牛奶.
请注意,结果不一样,但非常接近.消息的完整性保持不变,但它与我输入系统的信息不同.
现在让我们通过编解码器运行源消息B,压缩率为5.这次我尝试解码压缩消息时可能会得到以下信息:
鲍勃去商店寻找食物.
请注意,缺少更多信息,但消息的隐含意图仍然存在.但是我不知道,什么样的食物鲍勃去了商店.
最后,让我们通过编解码器运行源消息B,压缩率为1.这次我可能会回来:
鲍勃不在这里.
这次算法已经确定Bob已经离开的位置并不重要,只有Bob不在当前位置.原始消息的核心意图仍然保留,但其余的上下文已丢失.
同样的理论适用于图像.JPEG压缩通过算法丢弃数据,它认为不需要重建图像.
JPEG实际工作的过程充满了复杂的数学,但在更高的层次上它很容易理解.它的工作原理是将图像分解成小的8x8像素块.然后它将像素集合中的像素转换为数学公式的集合(如果您感兴趣,则为DCT-II),然后通过分析这些公式,看看哪些公式可以根据给定的压缩率省略.
在维基百科上有关DCT文章的数学的一个很好的视觉例子.

注意它是如何通过将一组简单的图案块(由余弦生成)混合在一起来建立字母"A"的图像.
现在,你会注意到 - 如果你看到的图像足够接近 - 有一堆非常接近于零的系数,就像+0.006和+0.021.你会注意到,如果你仔细观察,它们对左边结果图像的影响相当小.最简单的解释是:JPEG压缩通过抛弃小值来实现,实际上不计算它们.因此,当重新构建图像时,通过反转过程(iDCT/DCT-III),它不会添加或减少块的这些细微变化.它只存储/使用对最终块影响最大的那些.
压缩率越低,它试图扔掉的越多.压缩率越高,它试图保持的越多.
现在在这个阶段有更多微妙的数学,但这是最好的简单例子.
这意味着压缩器试图摆脱的信息直接取决于您尝试压缩的图像.由于块的结构和它们包含的信息,一些图像将比其他图像更可压缩而不显示视觉伪像.
还要考虑压缩的效果取决于谁在看它.我经常使用图像(无论是大学还是专业),花了很多时间研究JPEG/MPEG的基础压缩机制,因此我很容易发现压缩工件,因为我知道我在寻找什么.但那些相同的文物可能不会被不那么敏锐的眼睛所接受.(就像有些人不能听MP3压缩文件一样,因为他们可以在工作中听到压缩算法)
因此,您的里程可能会有所不同,具体取决于您要执行的操作以及您尝试压缩的图像.如果您对基础数学有很好的理解,那么根据您尝试压缩的图像,您可能能够根据压缩比来预测什么会给您带来最佳效果.但大多数时候,它只是实验的产物.
压缩率在60%和80%之间通常可以提供相当大的尺寸减小,而不会引入太多明显的视觉伪像.
| 归档时间: |
|
| 查看次数: |
2399 次 |
| 最近记录: |