怎样不管图片大小都生成一个等比例(如:4:3)的缩略图?可以裁减!解决办法
发布时间:2011-06-22 16:30:48 文章来源:www.iduyao.cn 采编人员:星星草
怎样不管图片大小都生成一个等比例(如:4:3)的缩略图?可以裁减!
看到好多新闻系统里面都有这个!
------解决方案--------------------
//****************************************************************************************生成缩略图
/// <summary>
/// 生成缩略图
/// </summary>
/// <param name= "originalImagePath "> 源图路径(物理路径) </param>
/// <param name= "thumbnailPath "> 缩略图路径(物理路径) </param>
/// <param name= "width "> 缩略图宽度 </param>
/// <param name= "height "> 缩略图高度 </param>
/// <param name= "mode "> 生成缩略图的方式 </param>
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
{
Image originalImage = Image.FromFile(originalImagePath);
int towidth = width;
int toheight = height;
int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = originalImage.Height;
switch (mode)
{
case "HW "://指定高宽缩放(可能变形)
break;
case "W "://指定宽,高按比例
toheight = originalImage.Height * width/originalImage.Width;
break;
case "H "://指定高,宽按比例
towidth = originalImage.Width * height/originalImage.Height;
break;
case "Cut "://指定高宽裁减(不变形)
if((double)originalImage.Width/(double)originalImage.Height > (double)towidth/(double)toheight)
{
oh = originalImage.Height;
ow = originalImage.Height*towidth/toheight;
y = 0;
x = (originalImage.Width - ow)/2;
}
else
{
ow = originalImage.Width;
oh = originalImage.Width*height/towidth;
x = 0;
y = (originalImage.Height - oh)/2;
}
break;
default :
break;
}
//新建一个bmp图片
Image bitmap = new System.Drawing.Bitmap(towidth,toheight);
//新建一个画板
Graphics g = System.Drawing.Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);
//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
new Rectangle(x, y, ow,oh),
GraphicsUnit.Pixel);
try
{
//以jpg格式保存缩略图
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch(System.Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}
//*************************************************************************************************
------解决方案--------------------
算法的原理就是
width和height相除
算出比例参数再做运算
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
页面基类PageBase.cs代码,实现系统进入权限判断 这样思路有问题吗?
pagebase.cs 代码
C# code
public class PageBase:System.We...
-
linq中的表连接语句???
例如:album,artist,genre这三个表的连接语句。。谢谢
------解决方案--------------------
public PagedList<...
-
为什么Repeater控件生成的HTML有很多空行?
效果如下,每个超链接之后都自动换行。
<a target="_blank" href='http://v.gamefy.cn/v...
-
关于模式窗口关闭的问题(在线等,解答立刻结贴给分)
功能什么都做完了。问题有二:
1.关闭的时候父窗口不刷新。于是我在吊用模式窗口的...
-
ASP.NET 中为什么要把相对路径处理成 绝对路径
处理函数如下:
C# code
// Builds an absolute URL
private static strin...
-
asp.net里面像QQ相册那样列表然后预览的jquery特效
asp.net里面像QQ相册那样列表然后预览的jquery特效
谁有这样的完整例子,...
-
求高手共同破解JQGrid 4.1 for Asp.net(比GridView强大)
软件名称:jqSuite(此插件比asp.net自带GridView强大的多,但只能使用30天)
...
-
急!!!在线等 asp.net中页面传值刷新不跳转新建窗口
C# code
<asp:TemplateField HeaderText="操作管...
-
请教:asp.net 导出word文件思路
我要从数据库取数据,写到word文件里,请教高手指点.多谢了!
------解决方案--------------------...
-
jqGrid4定义按钮查询(用过jqGrid的高手请进,在线等)
如图,json格式数据已加载,如果不用JQGrid底部工具栏上查询按钮查询,用最上面自己...