.net下生成高质量地缩略图
2007-11-08 21:44
393 查看
在生成缩略图地过程中,一开始利用.net 提供地GetThumbnailImage方法来实现,发现生成的有些图片质量很差。底是哪里出了问题呢,我们看下GetThumbnailImage方法在msdn上的说明:如果 Image 包含一个嵌入式缩略图像,则此方法会检索嵌入式缩略图,并将其缩放为所需大小。如果 Image 不包含嵌入式缩略图像,此方法会通过缩放主图像创建一个缩略图像。问题在于原照片上上,如果拿exif工具查看这张照片,你会发觉有一张160 * 120的缩略图包含在这张图片里面,因此GetThumbnailImage直接得到了这张缩略图返回了,而且因为我们要定义了大小,他实际上是把那张 160*120的缩略图放到我指定的大小后返回了。画质我们可以想象的到时多糟糕。
采用下面的方法可以得到质量很高的缩略图:
using System.Drawing;
using System.Drawing.Design;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
/// <summary>
/// 产生缩略图
/// </summary>
/// <param name="original_image_file">源文件</param>
/// <param name="object_width">缩略图宽度</param>
/// <param name="object_height">缩略图高度</param>
public static void GetThumbnailImage(string original_image_file, int object_width, int object_height)
{
int actual_width = 0;
int actual_heigh = 0;
string outputfilename = original_image_file + ".jpg";
System.Drawing.Bitmap original_image = new Bitmap(original_image_file);//读取源文件
actual_width = original_image.Width;
actual_heigh = original_image.Height;
Bitmap img = new Bitmap(object_width, object_height);
img.SetResolution(180f, 180f);
Graphics gdiobj = Graphics.FromImage(img);
gdiobj.CompositingQuality = CompositingQuality.HighQuality;
gdiobj.SmoothingMode = SmoothingMode.HighQuality;
gdiobj.InterpolationMode = InterpolationMode.HighQualityBicubic;
gdiobj.PixelOffsetMode = PixelOffsetMode.HighQuality;
gdiobj.FillRectangle(new SolidBrush(Color.White), 0, 0,object_width, object_height);
Rectangle destrect = new Rectangle(0, 0,object_width, object_height);
gdiobj.DrawImage(original_image, destrect, 0, 0, actual_width,actual_heigh, GraphicsUnit.Pixel);
System.Drawing.Imaging.EncoderParameters ep = new System.Drawing.Imaging.EncoderParameters(1);
ep.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)100);
System.Drawing.Imaging.ImageCodecInfo ici = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()[0];
if (ici != null)
{
img.Save(outputfilename, ici, ep);
}
else
{
img.Save(outputfilename, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
}
采用下面的方法可以得到质量很高的缩略图:
using System.Drawing;
using System.Drawing.Design;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
/// <summary>
/// 产生缩略图
/// </summary>
/// <param name="original_image_file">源文件</param>
/// <param name="object_width">缩略图宽度</param>
/// <param name="object_height">缩略图高度</param>
public static void GetThumbnailImage(string original_image_file, int object_width, int object_height)
{
int actual_width = 0;
int actual_heigh = 0;
string outputfilename = original_image_file + ".jpg";
System.Drawing.Bitmap original_image = new Bitmap(original_image_file);//读取源文件
actual_width = original_image.Width;
actual_heigh = original_image.Height;
Bitmap img = new Bitmap(object_width, object_height);
img.SetResolution(180f, 180f);
Graphics gdiobj = Graphics.FromImage(img);
gdiobj.CompositingQuality = CompositingQuality.HighQuality;
gdiobj.SmoothingMode = SmoothingMode.HighQuality;
gdiobj.InterpolationMode = InterpolationMode.HighQualityBicubic;
gdiobj.PixelOffsetMode = PixelOffsetMode.HighQuality;
gdiobj.FillRectangle(new SolidBrush(Color.White), 0, 0,object_width, object_height);
Rectangle destrect = new Rectangle(0, 0,object_width, object_height);
gdiobj.DrawImage(original_image, destrect, 0, 0, actual_width,actual_heigh, GraphicsUnit.Pixel);
System.Drawing.Imaging.EncoderParameters ep = new System.Drawing.Imaging.EncoderParameters(1);
ep.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)100);
System.Drawing.Imaging.ImageCodecInfo ici = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()[0];
if (ici != null)
{
img.Save(outputfilename, ici, ep);
}
else
{
img.Save(outputfilename, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
}
相关文章推荐
- .NET 生成高质量缩略图的通用函数代码 (修改版)
- .net等比生成高质量缩略图
- C#的图片处理类,生成高质量缩略图,代码已测试过,效果很好
- asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
- .NET生成缩略图并下载
- asp.net生成高质量缩略图通用函数(c#代码) _asp.net技巧
- asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
- asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
- Java Api 生成等比例高质量缩略图
- ASP.NET中高质量缩略图的生成
- 利用 Graphics 的 DrawImage 生成高质量的缩略图。
- asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
- asp.net生成高质量缩略图通用函数
- asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式 (转自QQROOM)
- asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
- asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
- C#生成高质量缩略图
- C# 生成高质量缩略图程序—终极算法
- asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
- .NET 等宽、等高、等比例、固定宽高生成缩略图 类