存储在数据库mvc2 c#4.0中时,以字节为单位减少图像

时间:2011-03-24 06:19:00

标签: c# .net asp.net-mvc asp.net-mvc-2

我正在mvc2网络应用程序中上传用户图片。用户可以上传任何大小的图像,例如10MB或更多。上载的图像将存储在数据库AS IMAGE数据类型中。但在存储到数据库之前,我想将其大小减小到4MB 。我该怎么做?

我使用以下代码缩小了图像的字节大小:

   if (file.ContentLength > 0)
        {

                        //Create byte Array with file len
                        var imgByte = new Byte[file.ContentLength];
                        //force the control to load data in array
                        file.InputStream.Read(imgByte, 0, file.ContentLength);



    System.IO.MemoryStream newImageStream = 
               new System.IO.MemoryStream(imgByte, 0, imgByte.Length); 

                        Image image = Image.FromStream(newImageStream, true); 

                        Bitmap resized = new Bitmap(image, new Size(800,600));



                System.IO.MemoryStream stream = new System.IO.MemoryStream();

                resized.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);

                        var imgBytes = new Byte[stream.Length];



                        customParentalHealthUser.ImageBytes = imgBytes;

                        stream.Close();
                        stream.Dispose();
                        resized.Dispose();
                    }

但是在显示图像时,即使缩小的尺寸存储在数据库中,图像也不会显示。我认为在减小尺寸的同时,图像也会变得腐败或其他。

请建议?

由于

2 个答案:

答案 0 :(得分:3)

您永远不会将流写入您正在创建的字节数组中:

var imgBytes = new Byte[stream.Length];

然后是什么?

使用ToArray()来获取实际的字节数组:

var imgBytes = stream.ToArray();

答案 1 :(得分:1)

您可以重新缩放图像或将其保存为具有更高压缩级别的JPEG格式。

如果图像大于预期的显示尺寸,我将从重新缩放图像开始。然后在必要时应用更高的压缩。