C# 在不损失质量的情况下调整JPEG的大小

C# 在不损失质量的情况下调整JPEG的大小,c#,.net,image-processing,C#,.net,Image Processing,我正在尝试使用.NET开发一个基于Web的小型图像编辑器。我在调整JPEG图像大小方面遇到了问题。据我所知,如果不降低一些质量,就无法操作JPEG,我认为这是唯一的方法。在此示例中,目标图像保存为png 所以我想做的是 1.当用户上传图像时,将其另存为PNG 2.像调整大小、旋转等操作它 3.另存为JPEG 如果我将png保存为jpeg格式,会不会也会有松散的质量?或者它应该是好的,因为它只是用其他格式保存它,而不是真正地操纵它 谢谢。如果您不想丢失质量,请不要使用jpeg。保持png有什么不对

我正在尝试使用.NET开发一个基于Web的小型图像编辑器。我在调整JPEG图像大小方面遇到了问题。据我所知,如果不降低一些质量,就无法操作JPEG,我认为这是唯一的方法。在此示例中,目标图像保存为png

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

如果我将png保存为jpeg格式,会不会也会有松散的质量?或者它应该是好的,因为它只是用其他格式保存它,而不是真正地操纵它


谢谢。

如果您不想丢失质量,请不要使用jpeg。保持png有什么不对?当您将png重新保存为jpeg时,是的,根据您选择的压缩比,您将丢失一些质量。这就是jpeg格式的本质。

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

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

供参考:

JPEG-Lossy适用于大多数规范(新规范也有无损格式,但还没有很多库支持它)

PNG-无损

TIFF-无损(RLE编码)


BMP-无损(原始编码)

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

供参考:

JPEG-Lossy适用于大多数规范(新规范也有无损格式,但还没有很多库支持它)

PNG-无损

TIFF-无损(RLE编码)


BMP-无损(原始编码)

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

此外,最好记住,如果您正在编码的图像以前是JPEG,编码器在调整大小后将很难再次编码。JPEG将图像分割为8x8像素块以执行编码,调整大小会移动这些块的边界。这是一个重要的注意事项,因为随着压缩比的提高,块之间的边界变得更加清晰——而JPEG在编码图像中不规则的锐边方面尤其糟糕(我跳过了所有内部细节,它们现在并不重要,如果你想知道它们,请发表评论)。不过,这种效果对于典型的照片压缩比并不重要


本质上:如果将图像编码为JPEG,则必须至少对其编码一次(很明显,不是吗?;)。JPEG(即有损)编码等于失去质量。

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

此外,最好记住,如果您正在编码的图像以前是JPEG,编码器在调整大小后将很难再次编码。JPEG将图像分割为8x8像素块以执行编码,调整大小会移动这些块的边界。这是一个重要的注意事项,因为随着压缩比的提高,块之间的边界变得更加清晰——而JPEG在编码图像中不规则的锐边方面尤其糟糕(我跳过了所有内部细节,它们现在并不重要,如果你想知道它们,请发表评论)。不过,这种效果对于典型的照片压缩比并不重要


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

你可能想在@Doug Chamberlain上发布这篇文章,更像是一个基于C的编程问题。你可能想在@Doug Chamberlain上发布这篇文章,更像是一个基于C的编程问题。编码和丢失质量之间没有直接关系。RLE或小波编码是无损的(如果你决定扔掉一些频率,小波可能是有损的),但你仍然在编码。我编辑这句话是为了明确说明这句话是关于JPEG的,感谢你指出错误:)编码和质量损失之间没有直接关系。RLE或小波编码是无损的(如果你决定丢弃一些频率,小波可能是有损的),但你仍然在编码。我正在编辑以明确说明这句话是关于JPEG的,感谢你指出错误:)