如何解压缩javascript中的字符串,用C#压缩?

时间:2013-01-31 16:16:01

标签: c# javascript image compression

  

可能重复:
  ZLIB Decompression - Client Side

我会尽力清楚,我很抱歉我的英语不好。这是个问题: 在我的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文件,其中的字符串代表使用压缩方法压缩的图像,我希望能够解压缩我在网络应用程序中使用javascript收到的字符串。有没有办法做到这一点?还有其他解决方案吗?谢谢大家!!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您可以使用JSXCompressor库进行解压缩(deflate,unzip)。

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