在C#中为asp.net Web窗体调整图像大小时图像质量丢失
本文关键字:图像 小时 图像质量 调整 窗体 中为 asp net Web | 更新日期: 2023-09-27 18:29:36
我正在尝试调整图像的大小,并使用以下代码段保存它。它运行良好,但一些图像在调整大小后会失去质量。当我检查时,原始图像看起来很好,只有调整大小的图像质量很低。我不知道如何在调整图像大小的同时提高图像质量。
System.Drawing.Image NewImage = FullsizeImage.GetThumbnailImage(NewWidth, MaxHeight, null, IntPtr.Zero);
// Clear handle to original file so that we can overwrite it if necessary
FullsizeImage.Dispose();
// Save resized picture
//NewImage.Save(NewFile);
if (fileExtension.ToLower() == ".jpg" || fileExtension.ToLower() == ".jpeg")
{
NewImage.Save(NewFile, System.Drawing.Imaging.ImageFormat.Jpeg);
}
请帮帮我。谢谢。
您可以使用这个类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
/// <summary>
/// Summary description for ResizeImage
/// </summary>
public class ResizeImage
{
public static Image Resize(Image imgToResize, int h, int w)
{
Size size = new Size(w, h);
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (Image)b;
}
}
此外,您可以使用此代码来选择图像质量:
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphic.CompositingQuality = CompositingQuality.HighQuality;
就像这里。
随着图像大小的调整,您还应该记住更多的事情(经验法则,而不是福音,因为这取决于您正在做什么等)…
- 将你能拿到的最大图像存储在Db(或任何地方)中(并且提供你的Db/存储可以允许这样做)。也就是说,你可以动态制作缩略图或缓存它们或其他什么,但最大的图像是"原始模型"
- 缩小规模——如果可能的话——不要扩大规模,因为这永远不会那么好
- 保持图像的"比例"
- 要小心图像操作,必须正确操作以避免添加噪声等
- 你使用的图像格式(用于保存或临时格式等)也非常重要,这也可能破坏你的图像,因为不同的格式有不同的算法,并使/牺牲图像的不同参数(无论是颜色还是细节等)
- 尽可能少地使用"转换"-所以保持原始,对其进行简单的缩放-并尽可能地保存在内存中,例如不要保存/加载等
希望这能有所帮助,