我正在尝试压缩图像文件以通过网络发送,这是我的测试压缩方法
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位,这是正常的吗?我做得对吗?
提前致谢
答案 0 :(得分:3)
您可能正在尝试压缩无法进一步压缩的流。
例如,像JPEG这样的有损图像格式通常只有非常少的冗余数据,因此使用DeflateStream
进行压缩的能力很小。
请注意,DeflateStream
旨在在读取或写入流时动态压缩文件,并且不假设整个流在压缩过程中可用。您的示例在内存中包含整个流,因此您可以使用其他“静态”压缩样式。
例如,您可能会发现Zip压缩效果更好:http://dotnetzip.codeplex.com是一个备受好评的库。
即便如此,对于已经压缩的图像,预计压缩率不会超过~15%。