zoukankan      html  css  js  c++  java
  • 图片缩略图生成功能

    最近研究了一下图片缩略图,感觉很头疼,还是把代码分享一下:

    private void DrawImageRectRect(string rawImgPath, string newImgPath, int width, int height)
    {
    System.Drawing.Image imageFrom
    = System.Drawing.Image.FromFile(rawImgPath);
    // 源图宽度及高度
    int imageFromWidth = imageFrom.Width;
    int imageFromHeight = imageFrom.Height;

    //在原画布中的位置
    int X, Y;
    //在原画布中取得的长宽
    int bitmapWidth, bitmapHeight;

    //// 根据源图及欲生成的缩略图尺寸,计算缩略图的实际尺寸及其在"画布"上的位置
    if (imageFromWidth / width > imageFromHeight / height)
    {
    bitmapWidth
    = (width * imageFromHeight) / height;
    bitmapHeight
    = imageFromHeight;
    X
    = (imageFromWidth - bitmapWidth) / 2;
    Y
    = 0;
    }
    else
    {
    bitmapWidth
    = imageFromWidth;
    bitmapHeight
    = (height * imageFromWidth) / width;
    X
    = 0;
    Y
    = (imageFromHeight - bitmapHeight) / 2;

    }
    // 创建画布
    Bitmap bmp = new Bitmap(width, height);
    Graphics g
    = Graphics.FromImage(bmp);
    // 用白色清空
    g.Clear(Color.White);
    // 指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    // 指定高质量、低速度呈现。
    g.SmoothingMode = SmoothingMode.HighQuality;
    // 在指定位置并且按指定大小绘制指定的 Image 的指定部分。
    g.DrawImage(imageFrom, new Rectangle(0, 0, width, height), new Rectangle(X, Y, bitmapWidth, bitmapHeight), GraphicsUnit.Pixel);
    try
    {
    //经测试 .jpg 格式缩略图大小与质量等最优
    bmp.Save(newImgPath, ImageFormat.Jpeg);
    }
    catch
    {
    }
    finally
    {
    //显示释放资源
    imageFrom.Dispose();
    bmp.Dispose();
    g.Dispose();
    }
    }

    希望对同志们有帮助.

  • 相关阅读:
    socket套接字
    popen:让进程看似文件
    fdopen:让文件描述符像文件一样使用
    计算机"右击"管理,不出现界面,解决方案
    javaEE版本的eclipse中导入工程,发现server里面找不到工程,根本发布不了也不能运行
    初识springMVC
    数据库系统
    Red hat 下nfs服务器的搭建
    Linux下MySQL安装和配置
    复习Hibernate(1)
  • 原文地址:https://www.cnblogs.com/tonymu/p/2121131.html
Copyright © 2011-2022 走看看