zoukankan      html  css  js  c++  java
  • 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(); 
       } 
      } 
  • 相关阅读:
    Consul负载均衡策略记录
    ASP NET CORE开发优化相关专用随笔
    .NET CORE 3.1配置文件读取方式
    CentOS 8 安装.NET CORE 3.1 发布以及运行
    CORE EF生成ORACLE数据库模型报错问题记录
    【转载】一名程序员十年技术之路的思考与感悟
    iview-admin部署linux nginx报500错误的问题记录
    [转]浅谈账号系统设计
    C#使用phantomjs,爬取AJAX加载完成之后的页面
    nginx触屏版跟PC的代理设置
  • 原文地址:https://www.cnblogs.com/qq260250932/p/5293883.html
Copyright © 2011-2022 走看看