.net C#生成缩略图实现思路分解

 更新时间:2013年05月26日 17:44:36   作者:  
生成缩略图的方式:HW指定高宽缩放(可能变形);W指定宽,高按比例 H指定高,宽按比例 Cut指定高宽裁减(不变形),具体实现如下,感兴趣的朋友可以参考下
复制代码 代码如下:

/// 生成缩略图
/// </summary>
/// <param name="originalImagePath">源图路径</param>
/// <param name="thumbnailPath">缩略图路径</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式:HW指定高宽缩放(可能变形);W指定宽,高按比例 H指定高,宽按比例 Cut指定高宽裁减(不变形)</param>  
/// <param name="mode">要缩略图保存的格式(gif,jpg,bmp,png) 为空或未知类型都视为jpg</param>  
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode, string imageType)
{
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格式保存缩略图
switch (imageType.ToLower())
{
case "gif":
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Gif);
break;
case "jpg":
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
break;
case "bmp":
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Bmp);
break;
case "png":
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Png);
break;
default:
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
break;
}
}
catch (System.Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}

相关文章

  • CodeFirst从零开始搭建Asp.Net Core2.0网站

    CodeFirst从零开始搭建Asp.Net Core2.0网站

    这篇文章主要为大家详细介绍了CodeFirst从零开始搭建Asp.Net Core2.0网站的详细过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • asp.net GridView的删除对话框的两种方法

    asp.net GridView的删除对话框的两种方法

    本来这两种方法,我已经掌握。但是没有总结,今天朋友突然问题,我竟然想不起来,找了半天,现在亡羊补牢,赶快写在博客里。
    2009-04-04
  • 阿里大鱼简单发送短信功能.net core版

    阿里大鱼简单发送短信功能.net core版

    这篇文章主要介绍了阿里大鱼发送短信功能.net core版,.net core版实现,只是简单发送短信功能,供大家参考,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • .NET 中Worker Service的使用入门

    .NET 中Worker Service的使用入门

    随着 .NET Core 3.0 的发布,ASP.NET 团队引入了一个新的&nbsp;Worker Service&nbsp;项目模板,该模板作为 .NET SDK 的一部分发布。在本文中,我将向您介绍这个新模板,以及使用它开发的一些实际的服务示例。
    2021-05-05
  • .NET中函数Main的使用技巧

    .NET中函数Main的使用技巧

    任何语言开发出来的程序,都会有一个程序入口函数,可能每个语言所使用的程序入口函数名称不一样,但是它们的作用都是一样的,都是被操作系统去调用。那么本文主要总结.NET中的程序入口函数Main使用的小技巧。
    2016-10-10
  • ASP.NET过滤HTML标签只保留换行与空格的方法

    ASP.NET过滤HTML标签只保留换行与空格的方法

    这篇文章主要介绍了ASP.NET过滤HTML标签只保留换行与空格的方法,包含网上常见的方法以及对此方法的改进,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • C#实现Web文件上传的两种方法实例代码

    C#实现Web文件上传的两种方法实例代码

    在Web编程中,我们常需要把一些本地文件上传到Web服务器上,上传后,用户可以通过浏览器方便地浏览这些文件,应用十分广泛。
    2013-07-07
  • asp.net母版页如何使用

    asp.net母版页如何使用

    继上篇文章,本文与大家分享asp.net母版页如何使用的全过程,并附有步骤截图,感兴趣的小伙伴们可以参考一下
    2015-09-09
  • VS2019中.NET如何实现打日志功能

    VS2019中.NET如何实现打日志功能

    本文主要介绍了VS2019中.NET如何实现打日志功能,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • MVC+EasyUI+三层新闻网站建立 详情页面制作方法(八)

    MVC+EasyUI+三层新闻网站建立 详情页面制作方法(八)

    这篇文章主要为大家详细介绍了MVC+EasyUI+三层新闻网站建立的第八篇,教大家如何制作详情页面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07

最新评论