A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© aisini 金牌黑马   /  2014-8-14 15:45  /  999 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public static void GenThumbnail(Image imageFrom, string pathImageTo, int width, int height)
  2.        {

  3.            if (imageFrom == null)
  4.            {
  5.                return;
  6.            }
  7.            // 源图宽度及高度
  8.            int imageFromWidth = imageFrom.Width;
  9.            int imageFromHeight = imageFrom.Height;
  10.            // 生成的缩略图实际宽度及高度
  11.            int bitmapWidth = width;
  12.            int bitmapHeight = height;
  13.            // 生成的缩略图在上述"画布"上的位置
  14.            int X = 0;
  15.            int Y = 0;
  16.            // 根据源图及欲生成的缩略图尺寸,计算缩略图的实际尺寸及其在"画布"上的位置
  17.            if (bitmapHeight * imageFromWidth > bitmapWidth * imageFromHeight)
  18.            {
  19.                bitmapHeight = imageFromHeight * width / imageFromWidth;
  20.                Y = (height - bitmapHeight) / 2;
  21.            }
  22.            else
  23.            {
  24.                bitmapWidth = imageFromWidth * height / imageFromHeight;
  25.                X = (width - bitmapWidth) / 2;
  26.            }
  27.            // 创建画布
  28.            Bitmap bmp = new Bitmap(width, height);
  29.            Graphics g = Graphics.FromImage(bmp);
  30.            // 用白色清空
  31.            g.Clear(Color.White);
  32.            // 指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。
  33.            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
  34.            // 指定高质量、低速度呈现。
  35.            g.SmoothingMode = SmoothingMode.HighQuality;
  36.            // 在指定位置并且按指定大小绘制指定的 Image 的指定部分。
  37.            g.DrawImage(imageFrom, new Rectangle(X, Y, bitmapWidth, bitmapHeight), new Rectangle(0, 0, imageFromWidth, imageFromHeight), GraphicsUnit.Pixel);
  38.            try
  39.            {
  40.                //经测试 .jpg 格式缩略图大小与质量等最优
  41.                bmp.Save(pathImageTo, ImageFormat.Jpeg);
  42.            }
  43.            catch
  44.            {
  45.            }
  46.            finally
  47.            {
  48.                //显示释放资源

  49.                bmp.Dispose();
  50.                g.Dispose();
  51.            }
  52.        }
复制代码
  调用该方法,最好直接用静态方法。不要类实例化来实例化去
   imagefrom代表来源图片,pathImageTo代表要保存的路径.

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马