惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
Recent Announcements
Recent Announcements
L
LangChain Blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
D
Docker
WordPress大学
WordPress大学
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
博客园 - 叶小钗
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
有赞技术团队
有赞技术团队
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MongoDB | Blog
MongoDB | Blog
博客园 - Franky

博客园 - 玛雅人

五大学习方法 Python AI 与深度学习:每周任务拆分及代码练手 Python AI 与深度学习 - D2.MNIST 手写数字识别 Python基础 - 常用类库汇总 Python AI 与深度学习 - D1.PyTorch 深度学习环境一键配置 ARDUINO - P2:按钮控制LED ARDUINO - P1:BLink Python调用SQLLite3 IIS8.5 安装证书 Kendo 计算字段 Kendo UI 的 k-template UpdatePanel中用后台CS代码调用JS代码,先执行控件事件,后触发JS SQL常用 Node.js 安装 有用的JS函数 vs2010 mvc3 运算符 || && 如何阻止ASP.NET的按钮控件提交页面 IIS Form 认证 保护HTML页面
生成缩略图
玛雅人 · 2013-09-29 · via 博客园 - 玛雅人

1. 关键函数

/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="originalImagePath">源图路径(物理路径)</param>
/// <param name="thumbnailPath">缩略图路径(物理路径)</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式</param>    
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height,ImageTransformMode mode)
{
    Image originalImage = Image.FromFile(originalImagePath);

    int towidth = width;
    int toheight = height;

    int x = 0;
    int y = 0;
    int ow = originalImage.Width;
    int oh = originalImage.Height;

    #region Auto模式计算
    if (mode == ImageTransformMode.AutoBig || mode == ImageTransformMode.AutoSmall)
    {
        if ((double)originalImage.Width > (double)originalImage.Height)
        {
            if (mode == ImageTransformMode.AutoBig)
            {
                mode = ImageTransformMode.FixedHeight;
            }
            else
            {
                mode = ImageTransformMode.FixedWidth;
            }
        }
        else
        {
            if (mode == ImageTransformMode.AutoBig)
            {
                mode = ImageTransformMode.FixedWidth;
            }
            else
            {
                mode = ImageTransformMode.FixedHeight;
            }
        }
    }
    #endregion

    switch (mode)
    {
        case ImageTransformMode.FixedBoth://指定高宽缩放(可能变形)                
            break;
        case ImageTransformMode.FixedWidth://指定宽,高按比例                    
            toheight = originalImage.Height * width / originalImage.Width;
            break;
        case ImageTransformMode.FixedHeight://指定高,宽按比例
            towidth = originalImage.Width * height / originalImage.Height;
            break;
        case ImageTransformMode.Cut://指定高宽裁减(不变形)                
            if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
            {
                oh = originalImage.Height;
                ow = originalImage.Height * towidth / toheight;
                y = 0;
                x = (originalImage.Width - ow) / 2;
            }
            else
            {
                ow = originalImage.Width;
                oh = originalImage.Width * height / towidth;
                x = 0;
                y = (originalImage.Height - oh) / 2;
            }
            break;                
        default:
            break;
    }

    //新建一个bmp图片
    Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

    //新建一个画板
    Graphics g = System.Drawing.Graphics.FromImage(bitmap);

    //设置高质量插值法
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

    //设置高质量,低速度呈现平滑程度
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

    //清空画布并以透明背景色填充
    g.Clear(Color.Transparent);

    //在指定位置并且按指定大小绘制原图片的指定部分
    g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
        new Rectangle(x, y, ow, oh),
        GraphicsUnit.Pixel);

    try
    {
        //以jpg格式保存缩略图
        bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
    }
    catch (System.Exception e)
    {
        throw e;
    }
    finally
    {
        originalImage.Dispose();
        bitmap.Dispose();
        g.Dispose();
    }
}
public enum ImageTransformMode
{
    /// <summary>
    /// //指定宽,高按比例 
    /// </summary>
    FixedWidth,
    /// <summary>
    /// 指定高,宽按比例
    /// </summary>
    FixedHeight,
    /// <summary>
    /// 指定高宽缩放(可能变形)
    /// </summary>
    FixedBoth,
    /// <summary>
    /// 指定高宽裁减(不变形)
    /// </summary>
    Cut,
    /// <summary>
    /// 按比例,生成较大的缩略图
    /// W>H ==> FixedWith
    /// W<H ==> FixedHeight
    /// </summary>
    AutoBig,
    /// <summary>
    /// 按比例,生成较小的缩略图
    /// W>H ==> FixedHeight
    /// W<H ==> FixedWith
    /// </summary>
    AutoSmall
}