在网站开发时,生成缩略图是一个非常常见和实用的功能.以前在asp里只能借助com组件实现,现在在.net里可以利用框架的强大的类库轻松实现.下面帖出完整的代码(带详细注释),参考了网上的一些文章及.net sdk相关内容.QQROOM网络家园的图片上传用到了所有的4种生成方式.

        /**//// <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();
            }
        }

关键方法Graphics.DrawImage见ms-help://MS.NETFrameworkSDKv1.1.CHS/cpref/html/frlrfsystemdrawinggraphicsclassdrawimagetopic11.htm

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

  1. [导入]ASP.NET生成高质量缩略图通用函数(c#代码)

    网站开发时,生成缩略图是一个非常常见和实用的功能.以前在asp里只能借助com组件实现,现在在.net里可以利用框架的强大的类库轻松实现.下面帖出完整的代码(带详细注释),参考了网上的一些文章及.ne ...

  2. asp.net生成高质量缩略图通用函数

    Code  1 /**//// <summary>  2        /// 生成缩略图  3        /// </summary>  4        /// < ...

  3. 生成高清缩略图; 添加图片、文字水印; 图片、文字水印透明

    之前写了一个公共的ImgHelper类,主要提供高清晰缩略图生成,由于在之前的实际操作过程中存在一些问题,最近有了点时间,于是重新拾起来再改进一下,顺便研究一下GDI+. 问题一:产品搜索列表展示,每 ...

  4. 无需用户输入,Adobe提出自动生成高质量合成图像新方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 没有用户输入,也能生成高质量的合成图像吗? 编辑:迈威AI研习社 ...

  5. 无需用户输入!Adobe提出自动生成高质量合成图像新方法

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 本文转载自:机器之心  |  作者:He Zhang等 编辑:小舟.杜伟 没有用户输入,也能生 ...

  6. 苏黎世大学 AI 新研究:仅用少量样本生成高质量光声图像

    近日,苏黎世联邦理工学院和苏黎世大学的科学家宣布,可以利用机器学习方法来改善光声成像,成果发表在Nature Machine Intelligence上(点击查看论文链接) "光声成像&qu ...

  7. EMNLP 2021 | 大道至简:微软提出可生成高质量文本表示的预训练语言模型

    ©作者 | 常馨 学校 | 北京邮电大学硕士生 研究方向 | NLP.信息检索 Abstract 基于自动编码器的语言模型在 Dense Retrieval(DR)中受到越来越多的关注,因为其训练编码 ...

  8. matlab输出高分辨率图片有白色毛刺,科学网—图片空白边缘处理/统计直方图---matlab/保存生成高质量的清晰图 - 杨小林的博文...

    这里介绍hist函数结合bar函数绘制统计直方图 一组原始采集数据,如:data=[2 3 -4 -1 4 -5 1 5 -2 -3]; 数据范围为range=-5:5; 首先可以采用hist函数进行 ...

  9. 科技最前沿!Adobe提出自动生成高质量合成图像新方法

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

最新文章

  1. JDBC Driver常用连接方法列表
  2. select count
  3. C/C++面试题:什么是COM和ActiveX,简述DCOM。
  4. 浅谈优化SQLServer数据库服务器内存配置的策略
  5. 微软携手红帽,共筑开源新未来
  6. python django开发网站项目难吗_用django开发网站时遇到的问题
  7. 电商扣减库存_电商平台仓库管理系统究竟有何功能?
  8. Git中上传忽略文件的方法 .gitignore
  9. android dalvik虚拟机 大小段问题
  10. pppoe服务器虚拟机,Hyper-V 批量建立虚拟机自动改IP并配置PPPOE拨号
  11. Can't save in background: fork: Cannot allocate memory
  12. 【UNITY3D 游戏开发之三】NGUI HUDTEXT 的练习源码及资源
  13. mxnet入门--第5篇
  14. 2021泰迪杯B题数据处理4.1
  15. JAVA ——线程概念(线程的生命周期及使用)
  16. 计算机网络安全开题报告怎么写,网络安全开题报告范文精选
  17. [附源码]java毕业设计网络学习平台
  18. 电平触发,边沿触发,脉冲触发
  19. Reducing the Number of Gray Levels, Zooming and Shrinking Images
  20. c#上位机开发(三)——简易串口发送数据

热门文章

  1. mysql无法连接server 2008_SQL Server 2008登录错误:无法连接到(local)解决方法
  2. 天牛须matlab,基于天牛须搜索算法(BAS)优化BP神经网络的权值阈值代码
  3. 计算机系统安全风险管理,信息系统安全风险及其控制措施.doc
  4. html中加入js,html嵌入js
  5. canvas3:绘制感叹号
  6. python textwrap_python2.7.3编译python模块学习- textwrap 文本包装和填充
  7. C语言3中方法判断32还是64位机
  8. Nginx——debug的使用
  9. 博物馆守卫问题(世界名画展览馆)
  10. 《网易编程题》买苹果