winforms 压缩图像而不牺牲其质量c#?

mqkwyuun  于 2023-06-06  发布在  C#
关注(0)|答案(1)|浏览(604)

我如何可以压缩图像而不牺牲其质量,但我需要减少的大小,每当我复制压缩图像到另一个文件夹。
string compressedFolderPath = @“C:\Users\Administrator\Desktop\VR Tasks\CompressiMG”; String compressedImagePath = Path.合并(compressedFolderPath,DateTime.Now.ToString(“yyyyMMddhhmmssfff”)+“.jpg”);

using (Image originalImage = Image.FromFile(imagePath))
             {
                 EncoderParameters encoderParameters = new EncoderParameters(0);
                 encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 50L);

                 ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");

                 originalImage.Save(compressedImagePath, jpegCodec, encoderParameters);
             }

             return compressedImagePath;

但这里的质量是失踪,我也尝试了作为Zipfile和Gzip文件和Base64作为文本文件,但大小没有减少太多。

2jcobegt

2jcobegt1#

图像具有一定量的固有信息或“质量”。我们有时称之为entropy。然而,在大多数图像中,实际熵小于原始数据大小。
像zip或png这样的无损压缩方法试图将文件大小减小到接近这个理论限制,同时精确地保留所有实际数据。
有损压缩方法在压缩步骤之前丢弃数据。它试图聪明地处理它丢弃的数据,但没有办法绕过您正在丢弃数据的事实。迟早你会注意到质量下降。如果你告诉jpeg编码器使用一个低质量的值,你几乎肯定会注意到。
所以你的选择是:
1.接受较低的质量
1.接受较大的文件大小
1.使用更智能的有损压缩算法。Jpeg是 * 旧 *,有许多更新,更好,算法,提供更好的主观质量为一个给定的文件大小。这是一个comparison between a few newer formats。但不要指望任何魔法。您可能需要找到适当的库来编码和解码图像,因为.net只包含一组基本的编码器。
如果你想坚持使用jpeg,你可能想尝试降低图像的分辨率。Jpeg不能很好地处理高压缩级别,所以在压缩之前降低分辨率可能会得到更好的结果。

相关问题