手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >C# 生成高质量缩略图程序—终极算法
C# 生成高质量缩略图程序—终极算法
摘要:先看代码:usingSystem;usingSystem.Drawing;usingSystem.Drawing.Imaging;using...

先看代码:

usingSystem;

usingSystem.Drawing;

usingSystem.Drawing.Imaging;

usingSystem.Drawing.Drawing2D;

/**////<summary>

///

///**生成高质量缩略图程序**

///

///File:GenerateThumbnail.cs

///

///Author:周振兴(Zxjay飘遥)

///

///E-Mail:tda7264@163.com

///

///Date:07-04-07

///

///</summary>

publicclassGenerateThumbnail

...{

/**////<summary>

///生成缩略图静态方法

///</summary>

///<paramname="pathImageFrom">源图的路径(含文件名及扩展名)</param>

///<paramname="pathImageTo">生成的缩略图所保存的路径(含文件名及扩展名)

///注意:扩展名一定要与生成的缩略图格式相对应</param>

///<paramname="width">欲生成的缩略图"画布"的宽度(像素值)</param>

///<paramname="height">欲生成的缩略图"画布"的高度(像素值)</param>

publicstaticvoidGenThumbnail(stringpathImageFrom,stringpathImageTo,intwidth,intheight)

...{

ImageimageFrom=null;

try

...{

imageFrom=Image.FromFile(pathImageFrom);

}

catch

...{

//throw;

}

if(imageFrom==null)

...{

return;

}

//源图宽度及高度

intimageFromWidth=imageFrom.Width;

intimageFromHeight=imageFrom.Height;

//生成的缩略图实际宽度及高度

intbitmapWidth=width;

intbitmapHeight=height;

//生成的缩略图在上述"画布"上的位置

intX=0;

intY=0;

//根据源图及欲生成的缩略图尺寸,计算缩略图的实际尺寸及其在"画布"上的位置

if(bitmapHeight*imageFromWidth>bitmapWidth*imageFromHeight)

...{

bitmapHeight=imageFromHeight*width/imageFromWidth;

Y=(height-bitmapHeight)/2;

}

else

...{

bitmapWidth=imageFromWidth*height/imageFromHeight;

X=(width-bitmapWidth)/2;

}

//创建画布

Bitmapbmp=newBitmap(width,height);

Graphicsg=Graphics.FromImage(bmp);

//用白色清空

g.Clear(Color.White);

//指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。

g.InterpolationMode=InterpolationMode.HighQualityBicubic;

//指定高质量、低速度呈现。

g.SmoothingMode=SmoothingMode.HighQuality;

//在指定位置并且按指定大小绘制指定的Image的指定部分。

g.DrawImage(imageFrom,newRectangle(X,Y,bitmapWidth,bitmapHeight),newRectangle(0,0,imageFromWidth,imageFromHeight),GraphicsUnit.Pixel);

try

...{

//经测试.jpg格式缩略图大小与质量等最优

bmp.Save(pathImageTo,ImageFormat.Jpeg);

}

catch

...{

}

finally

...{

//显示释放资源

imageFrom.Dispose();

bmp.Dispose();

g.Dispose();

}

}

}

生成的缩略图大小一定,无剪裁、无变形。

可以测试一下各种图形格式、图形质量、呈现方式生成的缩略图的大小和视觉质量。

经测试:Vista原默认桌面.jpg格式尺寸:1024*768,

生成原尺寸大小的缩略图,比较如下:

原图.jpg格式,223KB

.jpg102KB

.png1816KB

.gif228KB

.tiff2000KB以上

视觉上除.gif质量较差外,其他的与源图肉眼无法区别(本人有点近视^-^)

在考虑到专利及通用性等因素,推荐用.jpg格式。

【C# 生成高质量缩略图程序—终极算法】相关文章:

TreeView创建IHierarchicalDataSource类型的数据源实现

C# 可空类型分析

C# 判断两张图片是否一致的快速方法

调试ASP.NET应用程序的方法和技巧

c#生成缩略图不失真的方法

ASP.Net 上传图片并生成高清晰缩略图

c# .net 生成图片验证码的代码

asp.net图片上传生成缩略图的注意事项

引用全局程序集缓存内的程序集的方法

asp.net 生成静态时的过滤viewstate的实现方法

精品推荐
分类导航