首页 > 编程 > C# > 正文

C#创建缩略图操作类实例

2020-01-24 01:57:00
字体:
来源:转载
供稿:网友

本文实例讲述了C#创建缩略图操作类。分享给大家供大家参考。具体分析如下:

这个C#类可以生成各种形式的缩略图,可以自动保持图片比例缩略,可以根据百分比获得图片尺寸等

using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Imaging;namespace HtmlSnap{ public static class ImageHelper {  /// <summary>  /// 获取缩略图  /// </summary>  /// <param name="image"></param>  /// <param name="width"></param>  /// <param name="height"></param>  /// <returns></returns>  public static Image GetThumbnailImage(Image image, int width, int height)  {   if (image == null || width < 1 || height < 1)    return null;   // 新建一个bmp图片   //   Image bitmap = new System.Drawing.Bitmap(width, height);   // 新建一个画板   //   using (Graphics g = System.Drawing.Graphics.FromImage(bitmap))   {    // 设置高质量插值法    //    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;    // 设置高质量,低速度呈现平滑程度    //    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;    // 高质量、低速度复合    //    g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;    // 清空画布并以透明背景色填充    //    g.Clear(Color.Transparent);    // 在指定位置并且按指定大小绘制原图片的指定部分    //    g.DrawImage(image, new Rectangle(0, 0, width, height),     new Rectangle(0, 0, image.Width, image.Height),     GraphicsUnit.Pixel);    return bitmap;   }  }  /// <summary>  /// 生成缩略图,并保持纵横比  /// </summary>  /// <param name="image"></param>  /// <param name="width"></param>  /// <param name="height"></param>  /// <returns>生成缩略图后对象</returns>  public static Image GetThumbnailImageKeepRatio(Image image, int width, int height)  {   Size imageSize = GetImageSize(image, width, height);   return GetThumbnailImage(image, imageSize.Width, imageSize.Height);  }  /// <summary>  /// 根据百分比获取图片的尺寸  /// </summary>  /// <param name="picture"></param>  /// <param name="percent"></param>  /// <returns></returns>  public static Size GetImageSize(Image picture, int percent)  {   if (picture == null || percent < 1)    return Size.Empty;   int width = picture.Width * percent / 100;   int height = picture.Height * percent / 100;   return GetImageSize(picture, width, height);  }  /// <summary>  /// 根据设定的大小返回图片的大小,考虑图片长宽的比例问题  /// </summary>  /// <param name="picture"></param>  /// <param name="width"></param>  /// <param name="height"></param>  /// <returns></returns>  public static Size GetImageSize(Image picture, int width, int height)  {   if (picture == null || width < 1 || height < 1)    return Size.Empty;   Size imageSize;   imageSize = new Size(width, height);   double heightRatio = (double)picture.Height / picture.Width;   double widthRatio = (double)picture.Width / picture.Height;   int desiredHeight = imageSize.Height;   int desiredWidth = imageSize.Width;    imageSize.Height = desiredHeight;   if (widthRatio > 0)    imageSize.Width = Convert.ToInt32(imageSize.Height * widthRatio);   if (imageSize.Width > desiredWidth)   {    imageSize.Width = desiredWidth;    imageSize.Height = Convert.ToInt32(imageSize.Width * heightRatio);   }   return imageSize;  }   /// <summary>  /// 获取图像编码解码器的所有相关信息  /// </summary>  /// <param name="mimeType">包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串</param>  /// <returns>返回图像编码解码器的所有相关信息</returns>  public static ImageCodecInfo GetCodecInfo(string mimeType)  {   ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();   foreach (ImageCodecInfo ici in CodecInfo)   {    if (ici.MimeType == mimeType) return ici;   }   return null;  }  public static ImageCodecInfo GetImageCodecInfo(ImageFormat format)  {   ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();   foreach (ImageCodecInfo icf in encoders)   {    if (icf.FormatID == format.Guid)    {     return icf;    }   }   return null;  }  public static void SaveImage(Image image, string savePath, ImageFormat format)  {   SaveImage(image, savePath, GetImageCodecInfo(format));  }  /// <summary>  /// 高质量保存图片  /// </summary>  /// <param name="image"></param>  /// <param name="savePath"></param>  /// <param name="ici"></param>  private static void SaveImage(Image image, string savePath, ImageCodecInfo ici)  {   // 设置 原图片 对象的 EncoderParameters 对象   //   EncoderParameters parms = new EncoderParameters(1);   EncoderParameter parm = new EncoderParameter(Encoder.Quality, ((long)95));   parms.Param[0] = parm;   image.Save(savePath, ici, parms);   parms.Dispose();  } }}

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表