C# 从流压缩图像

C# 从流压缩图像,c#,asp.net-mvc-3,stream,compression,C#,Asp.net Mvc 3,Stream,Compression,我正在数据库中存储图像,在存储它们之前,我正在调整它们的大小 但是,调整大小不会压缩图像。这条流是同一条流。我希望能够压缩图像以及 如何压缩以流形式存储在数据库中并按如下方式返回到请求的图像 public ActionResult ViewImage(int id, string imageType ="image") { ContestImage contestImage = GetContestImage(id); byte[] fileCo

我正在数据库中存储图像,在存储它们之前,我正在调整它们的大小

但是,调整大小不会压缩图像。这条流是同一条流。我希望能够压缩图像以及

如何压缩以流形式存储在数据库中并按如下方式返回到请求的图像

    public ActionResult ViewImage(int id, string imageType ="image")
    {
        ContestImage contestImage = GetContestImage(id);

        byte[] fileContent;
        string mimeType;
        string fileName;

        if (imageType == "thumb")
        {
            fileContent = contestImage.ThumbNail.Image;
            mimeType = contestImage.ThumbNail.ImageMimeType;
            fileName = contestImage.ThumbNail.ImageFileName;
        }
        else if (imageType == "image")
        {
            fileContent = contestImage.Image.Image;
            mimeType = contestImage.Image.ImageMimeType;
            fileName = contestImage.Image.ImageFileName;
        }


        return File(fileContent, mimeType, fileName);
    }

public class UserImage
{
    public virtual int Id { set; get; }
    public virtual byte[] Image { set; get; }
    public virtual string ImageMimeType { set; get; }
    public virtual string ImageFileName { set; get; }
}

CompetingImage具有UserImage对象。

在从数据库存储和检索图像时,您是否尝试过使用用户图像对象?

想到两种主要方法:

  • 将数据作为图像加载,并以压缩文件格式(例如png或jpeg)将其序列化(到内存流)

  • 通过压缩流(如DeflateStream)序列化数据(到内存流)


一旦在MemoryStream中有了数据,就可以使用MemoryStream.ToArray()将其转换回直字节[]缓冲区以传递到数据库。

可能需要显示不起作用的调整大小代码?调整大小代码起作用,但它保持相同的字节[],因此不会压缩该代码。只是让图像变小。想看看吗?是的,这就是问题所在。