我正在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();
}
但是在显示图像时,即使缩小的尺寸存储在数据库中,图像也不会显示。我认为在减小尺寸的同时,图像也会变得腐败或其他。
请建议?
由于
答案 0 :(得分:3)
您永远不会将流写入您正在创建的字节数组中:
var imgBytes = new Byte[stream.Length];
然后是什么?
使用ToArray()来获取实际的字节数组:
var imgBytes = stream.ToArray();
答案 1 :(得分:1)
您可以重新缩放图像或将其保存为具有更高压缩级别的JPEG格式。
如果图像大于预期的显示尺寸,我将从重新缩放图像开始。然后在必要时应用更高的压缩。