【发布时间】:2011-06-06 16:42:21
【问题描述】:
我正在尝试将内存流压缩到另一个内存流中,以便上传到休息 API。 image 是包含 tif 图像的初始内存流。
WebRequest request = CreateWebRequest(...);
request.ContentType = "application/zip";
MemoryStream zip = new MemoryStream();
GZipStream zipper = new GZipStream(zip, CompressionMode.Compress);
image.CopyTo(zipper);
zipper.Flush();
request.ContentLength = zip.Length; // zip.Length is returning 0
Stream reqStream = request.GetRequestStream();
zip.CopyTo(reqStream);
request.GetResponse().Close();
zip.Close();
据我了解,我写入 GZipStream 的任何内容都将被压缩并写入传递给其构造函数的任何流。当我将图像流复制到拉链中时,实际上没有复制任何内容(图像为 200+ MB)。这是我第一次使用 GZipStream,所以我可能遗漏了一些东西,任何关于什么将不胜感激的建议。
编辑:
我应该注意到这对我来说是个问题,在上面的代码中,image 的位置位于流的最末端......因此,当我调用 image.CopyTo(zipper); 时,由于该位置,没有任何内容被复制。
【问题讨论】:
-
请注意:如果您的 TIFF 已经压缩(我认为大多数是压缩的),您将不会得到非常令人印象深刻的结果。
-
这些是未压缩的 GeoTiff。此外,我上传这些图像的 REST API 要求上传是 zip。
标签: c# compression