asp.net 高质量缩略图

2012-7-12:
复制代码
  protected  void Page_Load( object sender, EventArgs e)
 {
      string OriginalImgPath =  @" C:\Users\LHTC\Desktop\ttttimg\ttttimg\imgtt\tt.jpg ";
   //    string savepath = Path.ChangeExtension(OriginalImgPath, "jpg");
      string savepath =  @" C:\Users\LHTC\Desktop\ttttimg\ttttimg\imgtt\tt1.jpg ";
     System.Drawing.Image image = System.Drawing.Image.FromFile(OriginalImgPath);

      // System.Web.HttpPostedFile postedFile=Request.Files[0];
     
// System.Drawing.Image originalImage = System.Drawing.Image.FromStream(postedFile.InputStream, true);  

     SaveJpg(image, savepath,  1578475L);
     Response.Write( " ok ");
 }

  ///   <summary>
 
///   自适应按比例 上传保存
 
///   </summary>
 
///   <param name="OriginalImgPath"> 上传图片路径 </param>
 
///   <param name="SavePath"> 保存路径 </param>
 
///   <param name="Width"> 缩略图宽 </param>
 
///   <param name="Height"> 缩略图高 </param>
 
///   <param name="Quality"> 质量 75L </param>
  private  static  void SaveJpg(System.Drawing.Image OriginalImage,  string SavePath,  int Width,  int Height,  long Quality)
 {
      var rotatedImage = OriginalImage.Clone()  as System.Drawing.Image;
     Size thumbnailSize = GetThumbnailSize(rotatedImage, Width, Height);
     Bitmap newImage =  new Bitmap(thumbnailSize.Width, thumbnailSize.Height, PixelFormat.Format24bppRgb);
     newImage.SetResolution( 7272);
      using (Graphics gr = Graphics.FromImage(newImage))
     {
         gr.Clear(Color.Transparent);
         gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
         gr.SmoothingMode = SmoothingMode.AntiAlias;
         gr.CompositingQuality = CompositingQuality.HighQuality;
         gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
         gr.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
          using ( var attribute =  new ImageAttributes())
         {
             attribute.SetWrapMode(WrapMode.TileFlipXY);
             gr.DrawImage(OriginalImage,  new Rectangle( new Point( 00), thumbnailSize),  00, OriginalImage.Width, OriginalImage.Height, GraphicsUnit.Pixel, attribute);
         }
     }
     ImageCodecInfo myImageCodecInfo = GetEncoderInfo( " image/jpeg ");
     Encoder myEncoder = Encoder.Quality;
     EncoderParameters myEncoderParameters =  new EncoderParameters( 1);
     EncoderParameter myEncoderParameter =  new EncoderParameter(myEncoder, Quality);
     myEncoderParameters.Param[ 0] = myEncoderParameter;
     newImage.Save(SavePath, myImageCodecInfo, myEncoderParameters);
 }


  // 根据长宽自适应 按原图比例缩放 
  private  static Size GetThumbnailSize(System.Drawing.Image original,  int desiredWidth,  int desiredHeight)
 {
      var widthScale = ( double)desiredWidth / original.Width;
      var heightScale = ( double)desiredHeight / original.Height;
      var scale = widthScale < heightScale ? widthScale : heightScale;
      return  new Size
                    {
                        Width = ( int)(scale * original.Width),
                        Height = ( int)(scale * original.Height)
                    };
 }
  private  static ImageCodecInfo GetEncoderInfo(String mimeType)
 {
      int j;
     ImageCodecInfo[] encoders;
     encoders = ImageCodecInfo.GetImageEncoders();
      for (j =  0; j < encoders.Length; ++j)
     {
          if (encoders[j].MimeType == mimeType)
              return encoders[j];
     }
      return  null;
 }
复制代码


 public static void imgSmo(string strPath, string strName, string strType, int i)
    {
        try
        {              
            string path = strPath + strName + strType;
            System.Drawing.Image oImage = System.Drawing.Image.FromFile(path);

            Size imageSize = GetImageSize(oImage,160,70);
int//原图宽度int//原图高度new//质量newnew//JPEGnewlongnewlongnewnullforintifJPEGbreakstringifnullelsecatchthrownewpublicstaticintintnew//初始化//按比例缩小放大doubledoubledoubledoubleintintififreturn

此颜色量化类库的使用,也非常简单:

using (Bitmap bmp = new Bitmap(...))
 {
    OctreeQuantizer quantizer = new OctreeQuantizer ( 255 , 8 ) ;
//两个参数为颜色值,和颜色深度
using ( Bitmap quantized = quantizer.Quantize ( image ) )
        {
Response.ContentType = "image/gif" ;
quantized.Save ( Response.OutputStream , ImageFormat.Gif ) ;
}
}



本文转自曾祥展博客园博客,原文链接:http://www.cnblogs.com/zengxiangzhan/archive/2009/09/17/1568535.html ,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值