从流中压缩图像

本文关键字:图像 压缩 | 更新日期: 2023-09-27 18:34:38

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

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

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

    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 对象。

从流中压缩图像

两种主要方法浮现在脑海中:

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

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

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

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