缩略图生成方法

Posted on 2013-10-31 17:54  Arnold_Lee  阅读(238)  评论(0)    收藏  举报

   /// 生成缩略图  
     /// </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();
         }
     }

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3