将ASP.NET中的图像重新调整为指定维度而不会降低质量

时间:2014-03-18 11:20:39

标签: c# asp.net image-resizing

在我的asp.net应用程序中,我想将一些图像重新调整为小尺寸,比如说75 * 75,我想这样做而不会失去图像质量。目前我正在使用Bitmap重新调整大小,下面给出了代码片段。

System.Drawing.Image oldImg= System.Drawing.Image.FromFile(Filepath);
Bitmap newImg = new Bitmap(75, 75, PixelFormat.Format24bppRgb);
Graphics g= Graphics.FromImage(newImg);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.DrawImage(oldImg, new Rectangle(new Point(0, 0), newSize));
newImg.Save(Filepath, ImageFormat.Jpeg);

但是这样做,新图像看起来很模糊。我可以通过任何修改使用这种方法获得没有任何模糊的好图像,或者是否有任何其他方法可以将原始图像重新调整为指定尺寸而不会降低质量。

4 个答案:

答案 0 :(得分:0)

如果使用插值,生成的图像必定会变得模糊,特别是如果目标尺寸明显大于原始尺寸(在您的情况下,情况并非如此)。我担心通过选择不同的方法无法解决问题。您仍然可以选择选择InterpolationMode.NearestNeighbor(在某种意义上)没有插值;然后,生成的图像可能是块状的而不是模糊的(通常也不是所需的结果)。

答案 1 :(得分:0)

使用Jpeg保存图像会在每次保存时使图像质量下降 您可以在stackiverflow上找到有关质量问题的许多问题:
https://stackoverflow.com/a/87786/20126
https://stackoverflow.com/a/2320124/20126
https://stackoverflow.com/a/18086739/20126

答案 2 :(得分:0)

您可以使用许多工具来执行此操作。我目前正在使用ImageResizer,它非常棒。它会处理所有夜间细节,文档很棒:

ImageResizer

还有一个Nuget包,因此可以直接发送到您的项目:)

答案 3 :(得分:0)

一个简单的技巧,如果你能够这样做,只是为了确保原始图像大小是已调整大小的图像的精确倍数,例如150x150300x300 - 这可以确保模糊到期别名和插值最小化。