C#中不失真生成缩略图

C#中不失真生成缩略图- -
                                       

使用.net的方法GetThumbnailImage生成的缩略图失真严重,这里推荐一种不失真生成缩略图的方法,供参考。


/// <summary>
  /// 获得缩微图
  /// </summary>
  /// <returns></returns>
  public bool GetThumbImg()
  {
   try
   {
     string imgpath; //原始路径
     if(imgsourceurl.IndexOf("\",0)<0) //使用的是相对路径
     {
       imgpath = HttpContext.Current.Server.MapPath(imgsourceurl); //转化为物理路径
     }
     else
     {
       imgpath=imgsourceurl;
     }
     System.Drawing.Image sourceImage = System.Drawing.Image.FromFile(imgpath);
     int width = sourceImage.Width;
     int height = sourceImage.Height;
     if(thumbwidth <= 0)
     {
       thumbwidth = 120;
     }
     if(thumbwidth >= width)
     {
       return false;
     }
     else
     {
       (thumbwidth,thHeight*thumbwidth/thWidth,null,IntPtr.Zero);
       Image imgThumb=new System.Drawing.Bitmap(thumbwidth,height*thumbwidth/width);
       System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(imgThumb);
       g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
       g.DrawImage(sourceImage, new Rectangle(0, 0, thumbwidth,height*thumbwidth/width), 0, 0, width, height, GraphicsUnit.Pixel);

      string thumbpath="";
      sourceImage.Dispose();
      if(thumburl=="")
      {
        thumbpath=imgpath;
      }
     
      if(thumbpath.IndexOf("\",0)<0)//使用的是相对路径
      {
        thumbpath=HttpContext.Current.Server.MapPath(thumburl);//转化为物理路径
      }
      imgThumb.Save(thumbpath,ImageFormat.Jpeg);
      imgThumb.Dispose();
      return true;
    }
  }
  catch
  {
    throw;
  }
}

 

先转了。精辟的文章

posted @ 2010-11-23 17:22  ( ⊙ o ⊙ )啊!  阅读(562)  评论(0编辑  收藏  举报