• C#生成缩略图的方法


    1、需要添加应用System.Drawing.dll

    2.命名空间

    using System.IO;
    using System.Drawing;
    using System.Drawing.Imaging;

    3、方法一

    **//// <summary> 
           /// 生成缩略图 
           /// </summary> 
           /// <param name="originalImagePath">源图路径(物理路径)</param> 
           /// <param name="thumbnailPath">缩略图路径(物理路径)</param> 
           /// <param name="width">缩略图宽度</param> 
           /// <param name="height">缩略图高度</param> 
           /// <param name="mode">生成缩略图的方式</param>     
           public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode) 
           { 
               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格式保存缩略图 
                   bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg); 
               } 
               catch(System.Exception e) 
               { 
                   throw e; 
               } 
               finally 
               { 
                   originalImage.Dispose(); 
                   bitmap.Dispose();                         
                   g.Dispose(); 
               } 
           }
    View Code

    4、方法二

    using System.IO;
    using System.Drawing;
    using System.Drawing.Imaging;
    
    /// <summary>
    /// 图片处理类
    /// 1、生成缩略图片或按照比例改变图片的大小和画质
    /// 2、将生成的缩略图放到指定的目录下
    /// </summary>
    public class ImageClass
    {
        public Image ResourceImage;
        private int ImageWidth;
        private int ImageHeight;
    
        public string ErrMessage;
    
        /// <summary>
        /// 类的构造函数
        /// </summary>
        /// <param name="ImageFileName">图片文件的全路径名称</param>
    
        public ImageClass(string ImageFileName)
        {
            ResourceImage=Image.FromFile(ImageFileName);
         ErrMessage="";
        }
    
        public bool ThumbnailCallback()
        {
         return false;
        }
    
        /// <summary>
        /// 生成缩略图重载方法1,返回缩略图的Image对象
        /// </summary>
        /// <param name="Width">缩略图的宽度</param>
        /// <param name="Height">缩略图的高度</param>
        /// <returns>缩略图的Image对象</returns>
        public Image GetReducedImage(int Width,int Height)
        {
         try
         {
          Image ReducedImage;
    
          Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback); 
         
          ReducedImage=ResourceImage.GetThumbnailImage(Width,Height,callb,IntPtr.Zero);
      
          return ReducedImage;
         }
         catch(Exception e)
         {
          ErrMessage=e.Message; 
             return null;
         }
        }
    
        /// <summary>
        /// 生成缩略图重载方法2,将缩略图文件保存到指定的路径
        /// </summary>
        /// <param name="Width">缩略图的宽度</param>
        /// <param name="Height">缩略图的高度</param>
        /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:Imagesfilename.jpg</param>
        /// <returns>成功返回true,否则返回false</returns>
        public bool GetReducedImage(int Width,int Height,string targetFilePath)
        {
         try
         {
          Image ReducedImage;
    
          Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback); 
         
          ReducedImage=ResourceImage.GetThumbnailImage(Width,Height,callb,IntPtr.Zero);
          ReducedImage.Save(@targetFilePath,ImageFormat.Jpeg);
    
          ReducedImage.Dispose(); 
      
          return true;
         }
         catch(Exception e)
         {
          ErrMessage=e.Message; 
          return false;
         }
        }
    
        /// <summary>
        /// 生成缩略图重载方法3,返回缩略图的Image对象
        /// </summary>
        /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>  
        /// <returns>缩略图的Image对象</returns>
        public Image GetReducedImage(double Percent)
        {
         try
         {
          Image ReducedImage;
    
          Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback);
    
          ImageWidth=Convert.ToInt32(ResourceImage.Width*Percent);
          ImageHeight=Convert.ToInt32(ResourceImage.Width*Percent);
         
          ReducedImage=ResourceImage.GetThumbnailImage(ImageWidth,ImageHeight,callb,IntPtr.Zero);
      
          return ReducedImage;
         }
         catch(Exception e)
         {
          ErrMessage=e.Message; 
          return null;
         }
        }
    
        /// <summary>
        /// 生成缩略图重载方法4,返回缩略图的Image对象
        /// </summary>
        /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>  
        /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:Imagesfilename.jpg</param>
        /// <returns>成功返回true,否则返回false</returns>
        public bool GetReducedImage(double Percent,string targetFilePath)
        {
         try
         {
          Image ReducedImage;
    
          Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback);
    
          ImageWidth=Convert.ToInt32(ResourceImage.Width*Percent);
          ImageHeight=Convert.ToInt32(ResourceImage.Width*Percent);
         
          ReducedImage=ResourceImage.GetThumbnailImage(ImageWidth,ImageHeight,callb,IntPtr.Zero);
    
          ReducedImage.Save(@targetFilePath,ImageFormat.Jpeg);
    
          ReducedImage.Dispose(); 
      
          return true;
         }
         catch(Exception e)
         {
          ErrMessage=e.Message; 
          return false;
         }
        }
    
    
    }
    View Code

    5、亲测可用

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.IO;
      6 using System.Drawing;
      7 using System.Drawing.Imaging;
      8 
      9 namespace ConsoleApplication2
     10 {
     11     class Program
     12     {
     13         static void Main(string[] args)
     14         {
     15             string originalImagePath ="D:/pic/2012cnu-gisBarbecue/IMG_7226.JPG";
     16             string thumbnailPath ="D:/pic/2012cnu-gisBarbecue/14.jpg";
     17             MakeThumbnail(originalImagePath, thumbnailPath, 200, 200, "W");
     18             thumbnailPath = "D:/pic/2012cnu-gisBarbecue/15.jpg";
     19             ImageClass imageC = new ImageClass(originalImagePath);
     20             imageC.GetReducedImage(0.5, thumbnailPath);
     21         }
     22         /**/
     23         /// <summary> 
     24         /// 生成缩略图 
     25         /// </summary> 
     26         /// <param name="originalImagePath">源图路径(物理路径)</param> 
     27         /// <param name="thumbnailPath">缩略图路径(物理路径)</param> 
     28         /// <param name="width">缩略图宽度</param> 
     29         /// <param name="height">缩略图高度</param> 
     30         /// <param name="mode">生成缩略图的方式</param>     
     31         public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
     32         {
     33             Image originalImage = Image.FromFile(originalImagePath);
     34 
     35             int towidth = width;
     36             int toheight = height;
     37 
     38             int x = 0;
     39             int y = 0;
     40             int ow = originalImage.Width;
     41             int oh = originalImage.Height;
     42 
     43             switch (mode)
     44             {
     45                 case "HW"://指定高宽缩放(可能变形)                 
     46                     break;
     47                 case "W"://指定宽,高按比例                     
     48                     toheight = originalImage.Height * width / originalImage.Width;
     49                     break;
     50                 case "H"://指定高,宽按比例 
     51                     towidth = originalImage.Width * height / originalImage.Height;
     52                     break;
     53                 case "Cut"://指定高宽裁减(不变形)                 
     54                     if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
     55                     {
     56                         oh = originalImage.Height;
     57                         ow = originalImage.Height * towidth / toheight;
     58                         y = 0;
     59                         x = (originalImage.Width - ow) / 2;
     60                     }
     61                     else
     62                     {
     63                         ow = originalImage.Width;
     64                         oh = originalImage.Width * height / towidth;
     65                         x = 0;
     66                         y = (originalImage.Height - oh) / 2;
     67                     }
     68                     break;
     69                 default:
     70                     break;
     71             }
     72 
     73             //新建一个bmp图片 
     74             Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
     75 
     76             //新建一个画板 
     77             Graphics g = System.Drawing.Graphics.FromImage(bitmap);
     78 
     79             //设置高质量插值法 
     80             g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
     81 
     82             //设置高质量,低速度呈现平滑程度 
     83             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
     84 
     85             //清空画布并以透明背景色填充 
     86             g.Clear(Color.Transparent);
     87 
     88             //在指定位置并且按指定大小绘制原图片的指定部分 
     89             g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
     90                 new Rectangle(x, y, ow, oh),
     91                 GraphicsUnit.Pixel);
     92 
     93             try
     94             {
     95                 //以jpg格式保存缩略图 
     96                 bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
     97             }
     98             catch (System.Exception e)
     99             {
    100                 throw e;
    101             }
    102             finally
    103             {
    104                 originalImage.Dispose();
    105                 bitmap.Dispose();
    106                 g.Dispose();
    107             }
    108         }
    109     }
    110     public class ImageClass
    111     {
    112         public Image ResourceImage;
    113         private int ImageWidth;
    114         private int ImageHeight;
    115 
    116         public string ErrMessage;
    117 
    118         /// <summary>
    119         /// 类的构造函数
    120         /// </summary>
    121         /// <param name="ImageFileName">图片文件的全路径名称</param>
    122         public ImageClass(string ImageFileName)
    123         {
    124             ResourceImage = Image.FromFile(ImageFileName);
    125             ErrMessage = "";
    126         }
    127 
    128         public bool ThumbnailCallback()
    129         {
    130             return false;
    131         }
    132 
    133         /// <summary>
    134         /// 生成缩略图重载方法1,返回缩略图的Image对象
    135         /// </summary>
    136         /// <param name="Width">缩略图的宽度</param>
    137         /// <param name="Height">缩略图的高度</param>
    138         /// <returns>缩略图的Image对象</returns>
    139         public Image GetReducedImage(int Width, int Height)
    140         {
    141             try
    142             {
    143                 Image ReducedImage;
    144 
    145                 Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
    146 
    147                 ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
    148 
    149                 return ReducedImage;
    150             }
    151             catch (Exception e)
    152             {
    153                 ErrMessage = e.Message;
    154                 return null;
    155             }
    156         }
    157 
    158         /// <summary>
    159         /// 生成缩略图重载方法2,将缩略图文件保存到指定的路径
    160         /// </summary>
    161         /// <param name="Width">缩略图的宽度</param>
    162         /// <param name="Height">缩略图的高度</param>
    163         /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:Imagesfilename.jpg</param>
    164         /// <returns>成功返回true,否则返回false</returns>
    165         public bool GetReducedImage(int Width, int Height, string targetFilePath)
    166         {
    167             try
    168             {
    169                 Image ReducedImage;
    170 
    171                 Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
    172 
    173                 ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
    174                 ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);
    175 
    176                 ReducedImage.Dispose();
    177 
    178                 return true;
    179             }
    180             catch (Exception e)
    181             {
    182                 ErrMessage = e.Message;
    183                 return false;
    184             }
    185         }
    186 
    187         /// <summary>
    188         /// 生成缩略图重载方法3,返回缩略图的Image对象
    189         /// </summary>
    190         /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>  
    191         /// <returns>缩略图的Image对象</returns>
    192         public Image GetReducedImage(double Percent)
    193         {
    194             try
    195             {
    196                 Image ReducedImage;
    197 
    198                 Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
    199 
    200                 ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);
    201                 ImageHeight = Convert.ToInt32(ResourceImage.Width * Percent);
    202 
    203                 ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);
    204 
    205                 return ReducedImage;
    206             }
    207             catch (Exception e)
    208             {
    209                 ErrMessage = e.Message;
    210                 return null;
    211             }
    212         }
    213 
    214         /// <summary>
    215         /// 生成缩略图重载方法4,返回缩略图的Image对象
    216         /// </summary>
    217         /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>  
    218         /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:Imagesfilename.jpg</param>
    219         /// <returns>成功返回true,否则返回false</returns>
    220         public bool GetReducedImage(double Percent, string targetFilePath)
    221         {
    222             try
    223             {
    224                 Image ReducedImage;
    225 
    226                 Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
    227 
    228                 ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);
    229                 ImageHeight = Convert.ToInt32(ResourceImage.Width * Percent);
    230 
    231                 ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);
    232 
    233                 ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);
    234 
    235                 ReducedImage.Dispose();
    236 
    237                 return true;
    238             }
    239             catch (Exception e)
    240             {
    241                 ErrMessage = e.Message;
    242                 return false;
    243             }
    244         }
    245 
    246 
    247     }
    248 
    249 }
    View Code
  • 相关阅读:
    配置Express中间件
    C#字符串中特殊字符的转义
    JSON.NET 简单的使用
    ASP.NET 解决URL中文乱码的解决
    ASP.NET MVC 笔记
    VS中一些不常用的快捷键
    Visual Studio 中突出显示的引用
    Silverlight从客户端上传文件到服务器
    silverlight打开和保存文件
    sliverlight资源文件的URI调用
  • 原文地址:https://www.cnblogs.com/lwngreat/p/4857677.html
Copyright © 2020-2023  润新知