【发布时间】:2011-12-31 14:19:50
【问题描述】:
我在网站上有一个用户图库,访问者可以上传一些图片。上传图像后,应将其大小调整为一些预定义的预设。此外,原始图像也应保存。对于png 和bmp 图像格式,一切正常。但是如果我上传gif格式或者jpeg以一种颜色为主,上传的原图好像被压缩了。
例如:
原文:
已上传:
我在谷歌彻底搜索并找到了一些如何正确上传图片的示例。 最后我写了下一个方法:
void UploadImagePreset(Image image, ImageFormat imgFormat, string imgPath)
{
using (var uploadStream = imageUploader.CreateUploadStream(imagePath))
{
var newWidth = image.Width;
var newHeight = image.Height;
using (var outBitmap = new Bitmap(newWidth, newHeight))
{
using (var outGraph = Graphics.FromImage(outBitmap))
{
outGraph.CompositingQuality = CompositingQuality.HighQuality;
outGraph.SmoothingMode = SmoothingMode.HighQuality;
outGraph.PixelOffsetMode = PixelOffsetMode.HighQuality;
outGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;
var imageRect = new Rectangle(0, 0, newWidth, newHeight);
outGraph.DrawImage(image, imageRect);
outBitmap.Save(uploadStream, imgFormat);
}
}
}
}
但这并没有帮助。上传的图像与上述相同。 我已经尝试像这样指定结果图像的质量:
var encoderParameters = new EncoderParameters();
var encoderParameter = new EncoderParameter(Encoder.Quality, 100);
encoderParameters.Param[0] = encoderParameter;
var encoder = ImageCodecInfo.GetImageEncoders()
.Where(e => e.FormatID == imgFormat.Guid)
.FirstOrDefault();
outBitmap.Save(uploadStream, encoder, encoderParameters);
它也不起作用。另外当我上传jpeg图片时出现异常。
有什么方法可以在不压缩或调整大小的情况下上传图片?我花了几个小时试图解决这个问题并坚持下去。
【问题讨论】:
-
不清楚 - 上传是做什么的?如果它只是来自没有额外客户端代码的浏览器,您应该得到客户端上的确切文件 - 此时您的问题与上传(或 ASP.NET)无关,并且只是与调整大小有关。
-
我使用 FileUpload 控件没有任何额外的客户端代码
-
对,所以首先验证一下,如果您保存上传的文件 - 根本不处理它 - 您最终会得到完全相同的文件。当您向自己证明了这一点时,您可以将上传部分排除在外。将问题缩小到尽可能小的范围。
标签: c# asp.net .net image-processing