首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SevenZipSharp压缩率太低

SevenZipSharp压缩率太低
EN

Stack Overflow用户
提问于 2014-07-31 20:26:52
回答 1查看 696关注 0票数 0

我正在寻找一种压缩方法,可能会减少至少50%的大小,不幸的是,我找不到一个…

我用过.net one,GzipStream和DeflateStream,但它们的压缩率都很差。然后我找到了7-zip,特别是SevenZipSharp

因此,我下载了7-zip (实际的程序),指定7z.dll作为SevenZipSharp使用的库,并像这样使用它:

这是针对客户端-服务器应用程序的。

代码语言:javascript
复制
 Private Shared Function SevenZip_Compress(ms As MemoryStream) As Byte()
    Using compressedstream As New MemoryStream

        Dim compressor As New SevenZip.SevenZipCompressor
        compressor.CompressionMethod = CompressionMethod.Lzma2
        compressor.CompressionLevel = CompressionLevel.Ultra

        compressor.CompressStream(ms, compressedstream)
        ms.Dispose()
        Return compressedstream.ToArray
    End Using

End Function

使用这个,压缩流从131000~字节压缩到103000~字节,这仍然太高,不能通过互联网发送,我们在CompressionLevel.Ultra中讨论,如果我把它放低,压缩只会减少到125000~。为什么压缩率这么低?

我正在以1280x720的分辨率压缩Jpeg图像。我知道Jpeg已经被压缩了,但是如果我使用Png,原始流是262000,压缩后的流是350000字节(我不明白为什么),所以我坚持使用Jpeg。我是在运行时创建镜像的,如果这很重要的话,不涉及磁盘文件。

要在客户端上解压缩流,我使用以下命令:

代码语言:javascript
复制
  Private Function SevenZip_Decompress(bytes As Byte()) As Byte()
        Dim compressedstream As New MemoryStream(bytes)
        Dim decompressor As New SevenZip.SevenZipExtractor(compressedstream)
        Using decompressedstream As New MemoryStream
            decompressor.ExtractFile(0, decompressedstream)
            compressedstream.Dispose()
            Return decompressedstream.ToArray
        End Using
    End Function

我还尝试使用这个库提供的“共享”方法,如下所示:

代码语言:javascript
复制
Dim bytes() =  SevenZip.SevenZipCompressor.CompressBytes(ms.ToArray)

并提取:

代码语言:javascript
复制
Dim ms As New MemoryStream(SevenZip.SevenZipExtractor.ExtractBytes(bytes)

这个方法的效果更好一些,它将相同的流压缩到50000~,这是一个65%的压缩率,这是相当好的(尽管我还想要更多。)但是它为每个图像使用了12%的CPU,这太高了,而第一种方法,无论是在Low还是在Ultra中,只使用了3%的最大CPU,这是可以接受的。

cpu为i7-3610QM 2.3 The。

这个结果是我们在服务器和客户端之间的远程桌面会话中以每秒9帧的速度生成的,我没有使用远程桌面协议,我每秒发送9个带有该结果的全屏截图。

所以,我问,有没有比SevenZipSharp库功能更好的压缩方法呢?如果没有,我可以做什么来减少发送的图像字节,这样我就不需要只在这上面消耗我的上传带宽?有没有更好的不使用远程桌面协议的方法?

EN

回答 1

Stack Overflow用户

发布于 2014-08-01 05:59:44

正如你已经发现的,你根本不能压缩已经压缩的东西。您唯一的选择是解码JPEG图像,并使用更有效的图像压缩技术对其进行重新编码。你可以看看WebP

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25058828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档