.net生成缩略图

  1. /// <summary>     
  2.     /// 生成缩略图     
  3.     /// </summary>     
  4.     /// <param name="originalImagePath"></param>     
  5.     /// <param name="thumbnailPath"></param>     
  6.     /// <param name="width"></param>     
  7.     /// <param name="height"></param>     
  8.     public void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height)     
  9.     {     
  10.         //获取原始图片       
  11.         System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);     
  12.         //缩略图画布宽高       
  13.         int towidth = width;     
  14.         int toheight = height;     
  15.         //原始图片写入画布坐标和宽高(用来设置裁减溢出部分)       
  16.         int x = 0;     
  17.         int y = 0;     
  18.         int ow = originalImage.Width;     
  19.         int oh = originalImage.Height;     
  20.         //原始图片画布,设置写入缩略图画布坐标和宽高(用来原始图片整体宽高缩放)       
  21.         int bg_x = 0;     
  22.         int bg_y = 0;     
  23.         int bg_w = towidth;     
  24.         int bg_h = toheight;     
  25.         //倍数变量       
  26.         double multiple = 0;     
  27.         //获取宽长的或是高长与缩略图的倍数       
  28.         if (originalImage.Width >= originalImage.Height)     
  29.             multiple = (double)originalImage.Width / (double)width;     
  30.         else     
  31.             multiple = (double)originalImage.Height / (double)height;     
  32.         //上传的图片的宽和高小等于缩略图       
  33.         if (ow <= width && oh <= height)     
  34.         {     
  35.             //缩略图按原始宽高       
  36.             bg_w = originalImage.Width;     
  37.             bg_h = originalImage.Height;     
  38.             //空白部分用背景色填充       
  39.             bg_x = Convert.ToInt32(((double)towidth - (double)ow) / 2);     
  40.             bg_y = Convert.ToInt32(((double)toheight - (double)oh) / 2);     
  41.         }     
  42.         //上传的图片的宽和高大于缩略图       
  43.         else     
  44.         {     
  45.             //宽高按比例缩放       
  46.             bg_w = Convert.ToInt32((double)originalImage.Width / multiple);     
  47.             bg_h = Convert.ToInt32((double)originalImage.Height / multiple);     
  48.             //空白部分用背景色填充       
  49.             bg_y = Convert.ToInt32(((double)height - (double)bg_h) / 2);     
  50.             bg_x = Convert.ToInt32(((double)width - (double)bg_w) / 2);     
  51.         }     
  52.         //新建一个bmp图片,并设置缩略图大小.       
  53.         System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);     
  54.         //新建一个画板       
  55.         System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);     
  56.         //设置高质量插值法       
  57.         g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;     
  58.         //设置高质量,低速度呈现平滑程度       
  59.         g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;     
  60.         //清空画布并设置背景色       
  61.         g.Clear(System.Drawing.ColorTranslator.FromHtml("#F2F2F2"));     
  62.         //在指定位置并且按指定大小绘制原图片的指定部分       
  63.         //第一个System.Drawing.Rectangle是原图片的画布坐标和宽高,第二个是原图片写在画布上的坐标和宽高,最后一个参数是指定数值单位为像素       
  64.         g.DrawImage(originalImage, new System.Drawing.Rectangle(bg_x, bg_y, bg_w, bg_h), new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel);     
  65.         try     
  66.         {     
  67.             //获取图片类型       
  68.             string fileExtension = System.IO.Path.GetExtension(originalImagePath).ToLower();     
  69.             //按原图片类型保存缩略图片,不按原格式图片会出现模糊,锯齿等问题.       
  70.             switch (fileExtension)     
  71.             {     
  72.                 case ".gif": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Gif); break;     
  73.                 case ".jpg": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg); break;     
  74.                 case ".bmp": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Bmp); break;     
  75.                 case ".png": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Png); break;     
  76.             }     
  77.         }     
  78.         catch (System.Exception e)     
  79.         {     
  80.             throw e;     
  81.         }     
  82.         finally     
  83.         {     
  84.             originalImage.Dispose();     
  85.             bitmap.Dispose();     
  86.             g.Dispose();     
  87.         }     
  88.     }    
posted @ 2012-08-21 11:47  小女阿媚  阅读(114)  评论(0编辑  收藏  举报