0

我正在尝试压缩图像文件以通过网络发送,这是我的测试压缩方法

public void compress(MemoryStream inStream)
    {
        using (MemoryStream outStream = new MemoryStream())
        {
            using (DeflateStream deflate = new DeflateStream(outStream, CompressionMode.Compress, true))
            {
                Console.WriteLine(inStream.Length);
                deflate.Write(inStream.GetBuffer(), 0, (int)inStream.Length);
                deflate.Close();
                Console.WriteLine(outStream.Length);

            }
        }

    }

结果是

375531

354450

我想在压缩时至少应该得到 5 位而不是 6 位,这正常吗?我做对了吗?

提前致谢

4

1 回答 1

3

您可能正在尝试压缩无法进一步压缩的流。

例如,像 JPEG 这样的有损图像格式通常具有很少的冗余数据,因此压缩的能力DeflateStream是最小的。

请注意,DeflateStream它旨在在读取或写入流时即时​​压缩文件,并且不假定整个流在压缩过程中可用。您的示例在内存中有整个流,因此您可以使用其他“静态”压缩样式。

例如,您可能会发现使用 Zip 压缩可以获得更好的结果:http: //dotnetzip.codeplex.com是一个备受推崇的库。

即便如此,对于已经压缩的图像,预计压缩率不会超过 ~15%。

于 2011-12-23T08:03:42.720 回答