【发布时间】:2016-01-26 16:27:42
【问题描述】:
为了上传图片,我在客户端使用 plupload。然后在我的控制下,我有下一个逻辑:
public ActionResult UploadFile()
{
try
{
var file = Request.Files.Count > 0 ? Request.Files[0] : null;
using (var fileStream = new MemoryStream())
{
using (var oldImage = new Bitmap(file.InputStream))
{
var format = oldImage.RawFormat;
using (var newImage = ImageUtility.ResizeImage(oldImage, 800, 2000))
{
newImage.Save(fileStream, format);
}
byte[] bits = fileStream.ToArray();
}
}
{
catch (Exception ex)
{
}
}
ImageUtility.ResizeImage 方法:
public static class ImageUtility
{
public static Bitmap ResizeImage(Bitmap image, int width, int height)
{
if (image.Width <= width && image.Height <= height)
{
return image;
}
int newWidth;
int newHeight;
if (image.Width > image.Height)
{
newWidth = width;
newHeight = (int)(image.Height * ((float)width / image.Width));
}
else
{
newHeight = height;
newWidth = (int)(image.Width * ((float)height / image.Height));
}
var newImage = new Bitmap(newWidth, newHeight);
using (var graphics = Graphics.FromImage(newImage))
{
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
graphics.FillRectangle(Brushes.Transparent, 0, 0, newWidth, newHeight);
graphics.DrawImage(image, 0, 0, newWidth, newHeight);
return newImage;
}
}
}
我在这里遇到的问题是图像尺寸增加了。 我上传了 1.62MB 的图像,在调用此控制器后,它会创建 Bitmap 实例,然后将 Bitmap 保存到文件流并使用“fileStream.ToArray();”读取位我得到了 2.35MB 的“位”。
谁能告诉我在我将图像保存为位图后增加图像大小的原因是什么?我需要位图,因为我需要检查上传图像的高度和高度,并在需要时调整它的大小。
【问题讨论】:
-
更改文件格式会改变数据的大小,因为不同的图像格式类型存储图像数据的方式不同。
标签: c# asp.net asp.net-mvc bitmap