asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式

 更新时间:2008年08月04日 09:22:28   作者:  
这两天正在研究报表中饼图的绘图方法,文章中的某些做法值得参考.
/// <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();
            }
        }

相关文章

  • AspNetPager与Socut.Data使用方法

    AspNetPager与Socut.Data使用方法

    最近对AspNetPager与Socut.Data这两个控件产生了浓厚的兴趣,这两个控件配合可以减轻很多程序员编写代码的压力。ASpNetPager为分页控件,而Socut.Data为数据操作控件,ACCESS,MSSQL都可以。
    2008-10-10
  • asp.net简单生成验证码的方法

    asp.net简单生成验证码的方法

    这篇文章主要介绍了asp.net简单生成验证码的方法,涉及asp.net生成随机数与绘制图片的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • asp.net实现生成静态页并添加链接的方法

    asp.net实现生成静态页并添加链接的方法

    这篇文章主要介绍了asp.net实现生成静态页并添加链接的方法,非常实用的功能,需要的朋友可以参考下
    2014-07-07
  • .NET9 AOT部署方案详解

    .NET9 AOT部署方案详解

    文章详细介绍了.NET AOT(Ahead-of-Time)和JIT(Just-in-Time)两种编译和部署方式的对比,包括它们的优点和缺点,AOT适合快速启动、内存占用低、性能稳定的场景,这篇文章主要介绍了.NET9 AOT部署,需要的朋友可以参考下
    2025-01-01
  • 微信语音上传 下载功能实例代码

    微信语音上传 下载功能实例代码

    这篇文章主要介绍了微信语音上传 下载功能实例代码,需要的朋友可以参考下
    2017-08-08
  • ASP.NET MVC下拉框联动实例解析

    ASP.NET MVC下拉框联动实例解析

    这篇文章主要为大家详细介绍了ASP.NET MVC下拉框联动实现方法,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • .NetCore获取Json和Xml格式的配置信息

    .NetCore获取Json和Xml格式的配置信息

    本篇将和大家分享的是如何获取Json和Xml格式的配置信息,主要介绍的是Configuration扩展方法的使用,对.netcore 获取json和xml格式的配置信息的相关知识,感兴趣的朋友一起看看吧
    2017-09-09
  • asp.net(C#)解析Json的类代码

    asp.net(C#)解析Json的类代码

    现在json因为轻型,越来越流行,部门内部的数据标准趋向于json,所以开始学习。
    2009-12-12
  • sqlserver 删除重复记录处理(转)

    sqlserver 删除重复记录处理(转)

    删除重复记录有大小关系时,保留大或小其中一个记录
    2011-07-07
  • Asp.Net上传图片同时生成高清晰缩略图

    Asp.Net上传图片同时生成高清晰缩略图

    这篇文章主要介绍了Asp.Net上传图片同时生成高清晰缩略图的方法,需要的朋友可以参考下
    2015-09-09

最新评论