2012-05-19 162 views
1

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

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

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

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

+0

可能需要显示*不工作*的调整大小代码? – yamen

+0

resizin正在工作,但它保持相同的字节[],所以它不压缩。只是使图像变小。想看它? – DarthVader

+0

是的,这就是问题最可能发生的地方。 – yamen

回答

0

两种主要方法弹簧脑海:

  • 装入数据作为图像,并在压缩文件格式它序列(到存储器流)(例如PNG或JPEG)

  • 序列化通过诸如DeflateStream之类的压缩流的数据(到存储器流)。

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