I am storing images in database, before I store them, i am resizing them.
However, resizing, doesnt compress the image. Stream is same stream. I want to be able to compress the image as well.
How can I compress images which are stored in database as stream and returned to request as follows?
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 has UserImage object.
Two main approaches spring to mind:
Load the data as an Image and serialize it (to a memory stream) in a compressed file format (e.g. png or jpeg)
Serialize the data (to a memory stream) via a compressing stream such as DeflateStream.
Once you have the data in a MemoryStream, you can use MemoryStream.ToArray() to convert it back to a straight byte[] buffer to pass to your database.