广

ASP.NET

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-06 10:41:17 次阅读 稿源:互联网
    广告

      在网站开发时,生成缩略图是一个非常常见和实用的功能.以前在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

      http://www.cnblogs.com/jialine/archive/2006/09/15/505459.html

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告