从流中压缩图像

时间:2012-05-19 19:48:50

标签: c# asp.net-mvc-3 stream compression

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

但是,调整大小,不会压缩图像。流是相同的流。我希望能够压缩图像。

如何压缩存储在数据库中的图像作为流并返回请求,如下所示?

    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; }
}

ContestImage有UserImage对象。

2 个答案:

答案 0 :(得分:0)

在从数据库存储和检索图像时,您是否尝试使用GZipStream

答案 1 :(得分:0)

我想到了两种主要方法:

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

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

在MemoryStream中获得数据后,可以使用MemoryStream.ToArray()将其转换回直接字节[]缓冲区以传递到数据库。