银光闪烁的记忆流

本文关键字:记忆 闪烁 | 更新日期: 2023-09-27 18:19:35

im使用SLsharpziplip尝试压缩字节[],然后将其在网络上发送到服务器。字节[]包含已经由jpeg编码器压缩的jpeg数据。

你可能会问,如果jpeg已经压缩了图像,为什么我需要对它进行更多的压缩,因为我试过了,它成功了。

事情是这样的:

我把byte[]中的字节写入了一个txt文件,txt文件的大小大约是5k,我用winzip压缩了它,结果文件大约是2k,所以文件大小减少了50%。然而,当我尝试使用byte[]并使用slsharziplip压缩byte[]时,大小的减少是最小的。

这是我使用的代码:

 MemoryStream msCompressed = new MemoryStream();
 GZipOutputStream gzCompressed = new GZipOutputStream(msCompressed);
 gzCompressed.SetLevel(9);
  // allframes is a byte array. 
  gzCompressed.Write(allframes, 0, allframes.Length);
  gzCompressed.Finish();
  gzCompressed.IsStreamOwner = false;
  gzCompressed.Close();
  // i used byte[] compresseddata = msCompressed.ToArray() but i           thought i'll try this too.
  msCompressed.Seek(0, SeekOrigin.Begin);
  byte[] compresseddata = new byte[msCompressed.Length];
  msCompressed.Read(compresseddata, 0, compresseddata.Length);

=================================================

通过调试代码,我可以看到所有帧之间的大小差异。长度和压缩数据长度最小。但如果将相同的数据写入文本文件并使用winzip进行压缩,则其大小将减少50%。

这就是我如何将相同的数据写入一个txt文件:

       TextWriter tw = new StreamWriter(MainPage.fs); // fs is a filestream. 
                            foreach (byte b in  allframes )
                            {
                                tw.Write(b);
                            } 

=================================================

我做错什么了吗?!我是不是误解了什么!!

感谢:)

银光闪烁的记忆流

您不是在比较同类。

压缩JPEG图像数据没有意义,因为它已经被压缩了。将其写入文本文件不会使您获得与将其写入二进制文件相同的文件大小。

可能不会,我认为WinZip的zip算法比SLSharpZipLib更出色。你可以尝试改变压缩比,但除此之外,我会尝试不同的Silverlight兼容zip库。

正如您正确指出的那样,JPEG已经是一种高度压缩的文件类型,因此很难找到一种能够找到进一步冗余的压缩算法。

致问候,