2

可能重复:
ZLIB 解压 - 客户端

我会尽量说清楚,我很抱歉我的英语不好。这就是问题所在:在我的 Web 应用程序中,我收到了一个字符串,该字符串表示使用此算法压缩的图像,用 C# 编写:

public static class Compression
{
    public static string Compress(string text)
    {
        byte[] buffer = Encoding.UTF8.GetBytes(text);
        MemoryStream ms = new MemoryStream();
        using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
        {
            zip.Write(buffer, 0, buffer.Length);
        }

        ms.Position = 0;
        MemoryStream outStream = new MemoryStream();

        byte[] compressed = new byte[ms.Length];
        ms.Read(compressed, 0, compressed.Length);

        byte[] gzBuffer = new byte[compressed.Length + 4];
        System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
        System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
        return Convert.ToBase64String(gzBuffer);
    }

    public static string Decompress(string compressedText)
    {

        byte[] gzBuffer = Convert.FromBase64String(compressedText);
        using (MemoryStream ms = new MemoryStream())
        {
            int msgLength = BitConverter.ToInt32(gzBuffer, 0);
            ms.Write(gzBuffer, 4, gzBuffer.Length - 4);

            byte[] buffer = new byte[msgLength];

            ms.Position = 0;
            using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress))
            {
                zip.Read(buffer, 0, buffer.Length);
            }

            return Encoding.UTF8.GetString(buffer);
        }
    }
}

Decompress 方法用于服务器端应用程序。我收到一个 xml 文件,其中包含表示使用Compress方法压缩的图像的字符串,并且我希望能够在我的 Web 应用程序中解压缩我在 javascript 中收到的字符串。有没有办法做到这一点?还有其他解决方案吗?谢谢大家!!

4

2 回答 2

0

最好的解决方案可能是将解压函数从 C# 转换为 Javascript。您可以使用 Javascript 中已经可用的一个,例如this one,但是您需要更改图像的来源或在服务器上解压缩重新压缩,除非它恰好与您正在使用的压缩兼容。

另一种选择是在使用之前将图像转换为 .jpg 或 .png,再次在服务器上。从长远来看,这将为您提供更大的灵活性,但可能会根据流量和图像大小在服务器上增加负载。

于 2013-01-31T16:29:11.967 回答
0

您可以使用JSXCompressor库进行解压缩(放气、解压缩)。

但是,如果您的网络服务器支持 http 级别的压缩,我认为您可以跳过压缩和解压缩。

于 2013-01-31T16:29:19.073 回答