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(); 
       } 
      } 
  • 相关阅读:
    ActiveMQ 即时通讯服务 浅析
    Asp.net Mvc (Filter及其执行顺序)
    ActiveMQ基本介绍
    ActiveMQ持久化消息的三种方式
    Windows Azure Virtual Machine (27) 使用psping工具,测试Azure VM网络连通性
    Azure China (10) 使用Azure China SAS Token
    Windows Azure Affinity Groups (3) 修改虚拟网络地缘组(Affinity Group)的配置
    Windows Azure Storage (22) Azure Storage如何支持多级目录
    Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM
    Azure Redis Cache (2) 创建和使用Azure Redis Cache
  • 原文地址:https://www.cnblogs.com/qq260250932/p/5293883.html
Copyright © 2011-2022 走看看