放气流结果令人失望,这是正常的吗?

时间:2011-12-23 07:55:28

标签: c# .net compression deflatestream

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

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位,这是正常的吗?我做得对吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

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

例如,像JPEG这样的有损图像格式通常只有非常少的冗余数据,因此使用DeflateStream进行压缩的能力很小。

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

例如,您可能会发现Zip压缩效果更好:http://dotnetzip.codeplex.com是一个备受好评的库。

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