.NET 等宽、等高、等比例、固定宽高生成缩略图 类

根据原图片生成等比缩略图

#region 根据原图片生成等比缩略图
        /// <summary>
        /// 根据源图片生成缩略图
        /// </summary>
        /// <param name="imgPath_old">源图(大图)物理路径</param>
        /// <param name="imgPath_new">缩略图物理路径(生成的缩略图将保存到该物理位置)</param>
        /// <param name="width">缩略图宽度</param>
        /// <param name="height">缩略图高度</param>
        /// <param name="mode">缩略图缩放模式(取值"HW":指定高宽缩放,可能变形;取值"W":按指定宽度,高度按比例缩放;取值"H":按指定高度,宽度按比例缩放;取值"Cut":按指定高度和宽度裁剪,不变形);取值"DB":等比缩放,以值较大的作为标准进行等比缩放</param>
        /// <param name="type">即将生成缩略图的文件的扩展名(仅限:JPG、GIF、PNG、BMP)</param>
        public static void MakeThumbnail(string imgPath_old, string imgPath_new, int width, int height, string mode, string imageType, int xx, int yy)
        {
            System.Drawing.Image img = System.Drawing.Image.FromFile(imgPath_old);
            int towidth = width; int toheight = height;
            int x = 0; int y = 0; int ow = img.Width;
            int oh = img.Height; switch (mode)
            {
                case "HW":  //指定高宽压缩
                    if ((double)img.Width / (double)img.Height > (double)width / (double)height)//判断图形是什么形状
                    {
                        towidth = width;
                        toheight = img.Height * width / img.Width;
                    }
                    else if ((double)img.Width / (double)img.Height == (double)width / (double)height)
                    {
                        towidth = width;
                        toheight = height;
                    }
                    else
                    {
                        toheight = height;
                        towidth = img.Width * height / img.Height;
                    }
                    break;
                case "W":  //指定宽,高按比例
                    toheight = img.Height * width / img.Width;
                    break;
                case "H":  //指定高,宽按比例
                    towidth = img.Width * height / img.Height;
                    break;
                case "Cut":   //指定高宽裁减(不变形)
                    if ((double)img.Width / (double)img.Height > (double)towidth / (double)toheight)
                    {
                        oh = img.Height;
                        ow = img.Height * towidth / toheight;
                        y = yy; x = (img.Width - ow) / 2;
                    }
                    else
                    {
                        ow = img.Width;
                        oh = img.Width * height / towidth;
                        x = xx; y = (img.Height - oh) / 2;
                    } break;
                case "DB":    // 按值较大的进行等比缩放(不变形)
                    if ((double)img.Width / (double)towidth < (double)img.Height / (double)toheight)
                    {
                        toheight = height;
                        towidth = img.Width * height / img.Height;
                    }
                    else
                    {
                        towidth = width;
                        toheight = img.Height * width / img.Width;
                    } break;
                default:
                    break;
            }
            //新建一个bmp图片
            System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
            //新建一个画板
            System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
            //设置高质量插值法
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
            //设置高质量,低速度呈现平滑程度
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            //清空画布并以透明背景色填充
            g.Clear(System.Drawing.Color.Transparent);
            //在指定位置并且按指定大小绘制原图片的指定部分
            g.DrawImage(img, new System.Drawing.Rectangle(0, 0, towidth, toheight),
            new System.Drawing.Rectangle(x, y, ow, oh),
            System.Drawing.GraphicsUnit.Pixel); try
            {
                //以jpg格式保存缩略图
                switch (imageType.ToLower())
                {
                    case "gif":
                        img.Save(imgPath_new, ImageFormat.Jpeg);//生成缩略图
                        break;
                    case "jpg":
                        bitmap.Save(imgPath_new, System.Drawing.Imaging.ImageFormat.Jpeg);
                        break;
                    case "bmp":
                        bitmap.Save(imgPath_new, System.Drawing.Imaging.ImageFormat.Bmp);
                        break;
                    case "png":
                        bitmap.Save(imgPath_new, System.Drawing.Imaging.ImageFormat.Png);
                        break;
                    default:
                        bitmap.Save(imgPath_new, System.Drawing.Imaging.ImageFormat.Jpeg);
                        break;
                }
                ////保存缩略图
                // bitmap.Save(imgPath_new);
            }
            catch (System.Exception e)
            {
                throw e;
            }
            finally
            {
                img.Dispose();
                bitmap.Dispose(); g.Dispose();
            }
        }
        #endregion
时间: 2024-10-31 13:04:45

.NET 等宽、等高、等比例、固定宽高生成缩略图 类的相关文章

CSS实现垂直水平居中的三个方法:(1)固定宽高 (2)不固定宽高 (3)Flex

这两天迷上逛一些前端技术网站和论坛了,据说学前端要学会记录才能加深印象,所以有事没事还是写些随笔吧. 以前还在一个公司的面试试卷里做到过: 垂直居中: 1.父元素设置position:relative, 子元素设置position:absolute; top:50%; margin-top: -元素高度 2.height: 500px; line-height: 500px; 水平居中: 1.text-align:center 2.margin: 0 auto; 以上是我之前写的答案,接下来看看

JS-自制提速小工具:开发页面时需要按比例计算宽高值的快速计算器

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name="author" content"郭菊锋,[email protected]"> <title>开发页面时需要按比例计算宽高值得快速计算器</title> </head> <body> <p id="

在一个没有固定宽高的容器中,为什么设置position:absolute后就可以全屏显示了?

此场景适用于移动端百分比布局,背景全屏显示. 在一个没有固定宽高的容器中设置背景,想要背景全屏显示,设置宽高100%后还需设置position:absolut; 原因: absolute会脱离normal float, 即该元素会直接以root标签(类似window但不是<html>标签)进行参照,而root标签的高度存在具体数值, 即浏览器视窗高度, 有明确px值. 而relative不会脱离normal float, 他的height会直接依赖直接父元素(em单位也是), 所以百分比计算出

Selenium基础之--01(将浏览器最大化,设置浏览器固定宽、高,操控浏览器前进、后退)

1,将浏览器最大化 我们知道调用启动的浏览器不是全屏的,这样不会影响脚本的执行,但是有时候会影响我们"观看"脚本的执行. coding=utf-8 from selenium import webdriver import time browser = webdriver.Firefox() browser.get("http://www.baidu.com") time.sleep(2) print "浏览器最大化" browser.maxim

CSS百分比padding实现比例固定图片自适应布局 (转载)

一.CSS百分比padding都是相对宽度计算的 在默认的水平文档流方向下,CSS margin和padding属性的垂直方向的百分比值都是相对于宽度计算的,这个和top, bottom等属性的百分比值不一样. 这么设计的原因在我的新书(应该不出几个月就要出版了)中会有说明,这里不展开. 对于padding属性而言,任意方向的百分比padding都现对于宽度计算可以让我们轻松实现固定比例的块级容器,举个例子,假设现在有个<div>元素: div { padding: 50%; } 或者: di

CSS百分比padding实现比例固定图片自适应布局

本文转自 张鑫宇(大神的很多文章都拜读过,写的很好,清晰明了,赞)的 https://www.zhangxinxu.com/wordpress/2017/08/css-percent-padding-image-layout/ 一.CSS百分比padding都是相对宽度计算的 在默认的水平文档流方向下,CSS margin和padding属性的垂直方向的百分比值都是相对于宽度计算的,这个和top, bottom等属性的百分比值不一样. 这么设计的原因在我的新书(应该不出几个月就要出版了)中会有说

我的前端组件 ---- 16:9固定宽高比例的div

目标:遇到一个需求,让图片在页面中,不管宽度如何变化.宽高保持16:9的比例. 实现: 方法一:这也是比较经典的一个方法,利用padding-bottom来实现. <!DOCTYPE html> <html> <head> <title>固定宽高比16:9</title> <style type="text/css"> *{ margin: 0px; padding: 0px; } .wrap{ width:100

CSS左侧固定宽 右侧自适应(兼容所有浏览器)

左侧固定宽,右侧自适应屏幕宽: 左右两列,等高布局: 左右两列要求有最小高度,例如:200px;(当内容超出200时,会自动以等高的方式增高) 要求不用JS或CSS行为实现: 仔细分析试题要求,要达到效果其实也并不是太难,只是给人感觉像有点蛋疼的问题一样.但是你仔细看后你会觉得不是那么回事: 左边固定,右边自适应布局,这个第一点应该来说是非常的容易,实现的方法也是相当的多,那么就可以说第一条要求已不是什么要求了: 左右两列等高布局,这一点相对来说要复杂一些,不过你要是了解了怎么实现等高布局,那么

CSS左侧固定宽 右侧自适应(兼容所有浏览器)(转载)

左侧固定宽,右侧自适应屏幕宽: 左右两列,等高布局: 左右两列要求有最小高度,例如:200px;(当内容超出200时,会自动以等高的方式增高) 要求不用JS或CSS行为实现: 仔细分析试题要求,要达到效果其实也并不是太难,只是给人感觉像有点蛋疼的问题一样.但是你仔细看后你会觉得不是那么回事: 左边固定,右边自适应布局,这个第一点应该来说是非常的容易,实现的方法也是相当的多,那么就可以说第一条要求已不是什么要求了: 左右两列等高布局,这一点相对来说要复杂一些,不过你要是了解了怎么实现等高布局,那么