如何压缩图像的 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);
}
}
}
我有图像的字节数组,我想从中创建 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);
}
}
}