如何压缩图像的 MemoryStream

How to Zip a MemoryStream of an image

我有图像的字节数组,我想从中创建 Zip 文件。

我可以成功地将字节数组保存在jpg文件中,但是当我从它创建zip文件时,zip文件的图像(zip文件中的图像)被损坏了,我无法打开它! (当我尝试打开图像时,Winrar 显示错误信息如下: D:\sample.zip: 存档格式未知或已损坏 )

注意:我的图像在内存中,我不想创建物理图像文件。

这是我的代码:

private void Zip(byte[] imageBytes)
{
    string filePath = string.Empty;
    using (var ms = new MemoryStream())
    using (var zip = new ZipArchive(ms, ZipArchiveMode.Create))
    {
        var entry = zip.CreateEntry("sample.jpg", CompressionLevel.Optimal);

        using (var entryStream = entry.Open())
        using (var fileToCompressStream = new MemoryStream(imageBytes))
        {
            fileToCompressStream.CopyTo(entryStream);
        }

        using (var fs = new FileStream(baseFilePath + "sample.zip", FileMode.Create))
        {
            ms.Position = 0;
            ms.WriteTo(fs);
        }
    }
}

你应该可以做到:

using System.IO;
using System.IO.Compression;
using System.Text;

private void Zip (byte[] imageBytes) {

 string fileName = baseFilePath + "sample.zip";
 using (FileStream f2 = new FileStream(fileName, FileMode.Create)){
        using (GZipStream gz = new GZipStream(f2, CompressionMode.Compress, false))
        {
            gz.Write(imageBytes, 0, imageBytes.Length);
        }
   }
}