调整JPEG大小而不会丢失质量

时间:2011-09-07 14:09:44

标签: c# .net image-processing

我正在尝试使用.NET开发一个基于Web的小型图像编辑器。我遇到了JPEG图像调整大小的问题。据我所知,没有办法在不失去一些质量的情况下操纵JPEG,并认为这是唯一的方法。 Resizing an image in asp.net without losing the image quality。在此示例中,目标图像保存为png。

所以我想做的是 1.用户上传图像时将其另存为PNG
2.像调整旋转等操纵它 3.将其另存为JPEG

如果我将png保存为jpeg,那么质量也会下降吗?或者它应该没问题,因为它只是用其他格式保存它而不是真正操纵它。

感谢。

3 个答案:

答案 0 :(得分:1)

如果您不想失去质量,请不要使用jpeg。保持png有什么问题?当您将png重新保存为jpeg时,是的,您将失去一些质量,具体取决于您选择的压缩比。这就是jpeg格式的本质。

答案 1 :(得分:1)

PNG格式是一种无损格式,因此只要您使用源图像创建PNG就可以了。

供参考:

JPEG - 对于大多数规范都有损耗(新规范也有无损格式,但目前还没有很多库支持它。)

PNG - 无损

TIFF - 无损(RLE编码)

BMP - 无损(RAW编码)

答案 2 :(得分:1)

是的,它也会失去质量。调整JPEG大小的难度在于压缩(又称编码)算法本身,因此与源图像格式无关,因为要对图像进行编码,首先必须将其解码为原始格式(位图)。

另外,最好记住,如果您之前编码的图像是JPEG,那么编码器在调整大小后会再次编码它。 JPEG将图像划分为8x8像素块以执行编码,并调整大小以移动这些块的边框。这一点非常重要,因为压缩率越高,块之间的边界就越清晰 - JPEG在编码图像中不规则的锐边时特别糟糕(我正在跳过所有内部细节,它们现在不重要,评论是否无论如何你还想知道他们。但是,这种效果对于典型的照片压缩率并不重要。

基本上:如果您将图像编码为JPEG,则必须至少对其进行一次编码(显而易见,不是吗?;))。而JPEG(即有损)编码等于丢失质量。