C#生成缩略图

Posted 260250932

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#生成缩略图相关的知识,希望对你有一定的参考价值。

  1. /// 生成缩略图   
  2.     /// </summary>   
  3.     /// <param name="originalImagePath">源图路径</param>   
  4.     /// <param name="thumbnailPath">缩略图路径</param>   
  5.     /// <param name="width">缩略图宽度</param>   
  6.     /// <param name="height">缩略图高度</param>   
  7.     /// <param name="mode">生成缩略图的方式:HW指定高宽缩放(可能变形);W指定宽,高按比例 H指定高,宽按比例 Cut指定高宽裁减(不变形)</param>     
  8.     /// <param name="mode">要缩略图保存的格式(gif,jpg,bmp,png) 为空或未知类型都视为jpg</param>     
  9.     public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode, string imageType)  
  10.     {  
  11.         Image originalImage = Image.FromFile(originalImagePath);  
  12.         int towidth = width;  
  13.         int toheight = height;  
  14.         int x = 0;  
  15.         int y = 0;  
  16.         int ow = originalImage.Width;  
  17.         int oh = originalImage.Height;  
  18.         switch (mode)  
  19.         {  
  20.             case "HW"://指定高宽缩放(可能变形)           
  21.                 break;  
  22.             case "W"://指定宽,高按比例             
  23.                 toheight = originalImage.Height * width / originalImage.Width;  
  24.                 break;  
  25.             case "H"://指定高,宽按比例   
  26.                 towidth = originalImage.Width * height / originalImage.Height;  
  27.                 break;  
  28.             case "Cut"://指定高宽裁减(不变形)           
  29.                 if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)  
  30.                 {  
  31.                     oh = originalImage.Height;  
  32.                     ow = originalImage.Height * towidth / toheight;  
  33.                     y = 0;  
  34.                     x = (originalImage.Width - ow) / 2;  
  35.                 }  
  36.                 else  
  37.                 {  
  38.                     ow = originalImage.Width;  
  39.                     oh = originalImage.Width * height / towidth;  
  40.                     x = 0;  
  41.                     y = (originalImage.Height - oh) / 2;  
  42.                 }  
  43.                 break;  
  44.             default:  
  45.                 break;  
  46.         }  
  47.         //新建一个bmp图片   
  48.         Image bitmap = new System.Drawing.Bitmap(towidth, toheight);  
  49.         //新建一个画板   
  50.         Graphics g = System.Drawing.Graphics.FromImage(bitmap);  
  51.         //设置高质量插值法   
  52.         g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;  
  53.         //设置高质量,低速度呈现平滑程度   
  54.         g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;  
  55.         //清空画布并以透明背景色填充   
  56.         g.Clear(Color.Transparent);  
  57.         //在指定位置并且按指定大小绘制原图片的指定部分   
  58.         g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),  
  59.            new Rectangle(x, y, ow, oh),  
  60.            GraphicsUnit.Pixel);  
  61.         try  
  62.         {  
  63.             //以jpg格式保存缩略图   
  64.             switch (imageType.ToLower())  
  65.             {  
  66.                 case "gif":  
  67.                     bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Gif);  
  68.                     break;  
  69.                 case "jpg":  
  70.                     bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);  
  71.                     break;  
  72.                 case "bmp":  
  73.                     bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Bmp);  
  74.                     break;  
  75.                 case "png":  
  76.                     bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Png);  
  77.                     break;  
  78.                 default:  
  79.                     bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);  
  80.                     break;  
  81.             }  
  82.         }  
  83.         catch (System.Exception e)  
  84.         {  
  85.             throw e;  
  86.         }  
  87.         finally  
  88.         {  
  89.             originalImage.Dispose();  
  90.             bitmap.Dispose();  
  91.             g.Dispose();  
  92.         }  
  93.     }  

 

 

==================================

C#生成缩略图 (通用模式) 


用数据库保存图片的路径和文件名称,把文件保存在文件夹中.
//保存在数据库中的文件路径
ArrayList arrFilePath=new ArrayList();
arrFilePath=myCommonMethod.UploadPic(Files,"/UpLoads/UpPicture/");
//获取文件名称
string fileName=arrFilePath[0].SubString(arrFilePath[0].LastIndexOf("/")+1);
//源图路径(物理路径)
originalImagePath=Request.PhysicalApplicationPath+"/UpLoads/UpPicture/"+fileName;
//缩略图路径(物理路径)
thumbnailPath     =Request.PhysicalApplicationPath+"/UpLoads/UpPicture/"+"thumb_"+fileName;
//调用生成缩略图方法
this.MakeThumbnail(originalImagePath,thumbnailPath,120,150, strMode out outthumbnailPath);

#region  生成缩略图 
  ///<summary> 
  /// 生成缩略图 
  /// </summary> 
  /// <param name="originalImagePath">源图路径(物理路径)</param> 
  /// <param name="thumbnailPath">缩略图路径(物理路径)</param> 
  /// <param name="width">缩略图宽度</param> 
  /// <param name="height">缩略图高度</param> 
  /// <param name="mode">生成缩略图的方式</param>     
  public  void MakeThumbnail(string originalImagePath,  string thumbnailPath, int width, int height, string mode out string outthumbnailPath) 
  { 
   System.Drawing.Image originalImage =System.Drawing.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图片 
   System.Drawing.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); 
    outthumbnailPath=thumbnailPath;
   } 
   catch(System.Exception e) 
   { 
    throw e; 
   } 
   finally 
   { 
    originalImage.Dispose(); 
    bitmap.Dispose();                         
    g.Dispose(); 
   } 
  } 

 

以上是关于C#生成缩略图的主要内容,如果未能解决你的问题,请参考以下文章

c#为较小的图像生成缩略图

C#图片切割图片压缩缩略图生成

使用 C# System.Drawing 生成缩略图时居中裁剪图像

C#获取本地视频的缩略图的方法都有哪些?

请问有大神知道C#怎么获取上传的文档的缩略图吗?

JPG批量裁剪以生成方形缩略图