• 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(); 
       } 
      }
  • 相关阅读:
    微信内置浏览器 如何小窗不全屏播放视频?也可以尝试canvas.
    正则替换replace中$1的用法以及常用正则
    去掉textarea和input在ios下默认出现的圆角
    让ckplayer支持m3u8格式的播放
    ios中的safari转换时间戳问题
    JavaScript判断不同平台
    swiper实现臭美app滑动效果
    开启CSP网页安全政策防止XSS攻击
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    设置元素text-overflow: ellipsis后引起的文本对齐问题
  • 原文地址:https://www.cnblogs.com/ahxujian/p/9108616.html
Copyright © 2020-2023  润新知