【发布时间】:2014-05-06 16:06:23
【问题描述】:
我正在为一个只需要一个基本文件的小页面使用一个非常基本的文件上传。
但这里的问题是文件大小在上传到服务器后会增加,大约 800 KB 到 1.7 兆字节
这大概是因为我们实际上并没有上传文件本身,只是复制流并基于它制作新图像。
我尝试更改 graphicsHandle.InterpolationMode 并尝试添加 graphicsHandle.CompositingQuality 以更改各种质量,但由于某种原因它们的大小和质量始终相同,就像它不会影响图像一样,就像 graphicsHandle 什么都不做一样。
我使用的代码如下
Stream stream = imageUpload.PostedFile.InputStream;
Bitmap image = new Bitmap(stream);
System.Drawing.Image newImage = new Bitmap(image.Width, image.Height);
using (Graphics graphicsHandle = Graphics.FromImage(newImage))
{
graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic;
//graphicsHandle.CompositingQuality = CompositingQuality.Default;
graphicsHandle.DrawImage(image, 0, 0, image.Width, image.Height);
}
DateTime date = DateTime.Now;
string dateString = date.ToString("yyyyMMdd_HHmmss");
Guid guid = Guid.NewGuid();
fileName = string.Format("{0}_{1}{2}", dateString, guid, extension);
newImage.Save(path + fileName);
response = true;
imageUpload 是一个 asp:FileUpload
除了文件大小翻倍之外,一切都很好。
graphicsHandle 不运行吗?因为它似乎不会以任何方式影响图像
【问题讨论】:
-
你为什么要从流中创建 btimap 而不是创建文件流并将整个内容直接写入文件中.....
-
我的猜测是,如果有任何验证它实际上是图像,那么您不需要做太多事情。作为旁注,它不仅仅是将图像保存为位图,因此未压缩会解释文件大小的增加
-
dbw 是对的:您可能上传了 JPG,然后将其转换为位图,这是不必要的(并且比原始图像文件大得多)。
标签: c# asp.net .net file-upload