zoukankan      html  css  js  c++  java
  • asp.net生成高质量缩略图通用函数(c#代码)

    ///   <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();   
                              }
       
                      }
       
        
      关键方法Graphics.DrawImage见ms
    -help://MS.NETFrameworkSDKv1.1.CHS/cpref/html/frlrfsystemdrawinggraphicsclassdrawimagetopic11.htm   
  • 相关阅读:
    2019 icpc南昌全国邀请赛-网络选拔赛J题 树链剖分+离线询问
    Android小项目之十二 设置中心的界面
    【Mood-5】14条建议,使你的IT职业生涯更上一层楼
    【Android 界面效果15】Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)
    单线程模型中Message、Handler、Message Queue、Looper之间的关系
    140个google面试题
    Android小项目之十一 应用程序的主界面
    Android小项目之十 应用程序更新的签名问题
    Android小项目之九 两种上下文的区别
    Android小项目之八 界面细节
  • 原文地址:https://www.cnblogs.com/nasdaqhe/p/542058.html
Copyright © 2011-2022 走看看