调整gif图像的大小会导致质量下降

时间:2011-11-11 09:30:16

标签: asp.net graphics gdi+ image-resizing

我正在使用Graphics.DrawImage()来调整ASP.NET应用程序中的图像大小。

除了gif。

之外,所有图像格式都可以正常使用

这是我的原始图片:

enter image description here

当我调整为300px时,它会返回:

enter image description here

我正在使用的代码是:

 Dim postedFile as new Bitmap("flower.gif")
 Dim bmpOut As System.Drawing.Bitmap
 Dim Format As ImageFormat = postedFile.RawFormat
 bmpOut = New Bitmap(width, height)
 Dim g As Graphics = Graphics.FromImage(bmpOut)
 g.InterpolationMode = InterpolationMode.High
 g.DrawImage(postedFile, 0, 0, width, height)
 postedFile.Dispose()
 Return bmpOut
 bmpOut.Dispose()

我也尝试使用所有可用的InterpolationMode,包括InterpolationMode.HighQualityBicubic,但图像质量仍然差。

为什么会发生这种情况,如何防止图像质量下降?

3 个答案:

答案 0 :(得分:4)

问题不在于您发布的调整大小代码中。我使用您发布的大图像运行,结果看起来很棒。将新创建的每像素24位图像保存为新的gif时出现问题 - 为8bpp。你基本上有两个选择:

  1. 实现代码以为新gif生成优化的调色板 (或者只是使用原始图像中的调色板)
  2. 保存为.png - 这是一种完全优越的格式

答案 1 :(得分:0)

如果您将已调整大小的图片保存为.gif,我认为没有理由在保存的.gif文件中发生这种情况。 .gif限制为256种颜色(除非完成了一些黑客攻击),并且在所有操作可能超过256次后重新调整大小的图像。此外,我不会惊讶地发现无论你做什么例行程序#39;重新使用将图像转换为.gif并不是非常关注质量。

答案 2 :(得分:0)

这不是插值,而是因为没有为目标图像设置ColorPalette。你必须量化。请参阅http://glennjones.net/2005/10/high-quality-dynamically-resized-images-with-dot-net/

上的示例