完善一下别人的方法,成自己好用的工具

 using System.Drawing;
using System.Drawing.Imaging; namespace GXNUQzzx.Tools.Utility
{
/// <summary>
/// 图片缩放模式
/// </summary>
public enum ScaleMode
{
/// <summary>
/// 指定高宽缩放(可能失真)
/// </summary>
Normal, /// <summary>
/// 指定高,宽按比例
/// </summary>
Width, /// <summary>
/// 指定宽,高按比例
/// </summary>
Height, /// <summary>
/// 指定高宽裁减(不失真)
/// </summary>
Cut
} /// <summary>
/// 图片辅助类
/// </summary>
public static class ImageHelper
{
/// <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 GenerateThumbnail(string originalImagePath, string thumbnailPath, int width, int height, ScaleMode mode)
{
using (Image originalImage = Image.FromFile(originalImagePath))
{
GenerateThumbnail(originalImage, thumbnailPath, width, height, mode);
}
} /// <summary>
/// 生成缩略图
/// </summary>
/// <param name="originalImage">源图</param>
/// <param name="thumbnailPath">缩略图路径(物理路径)</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式</param>
public static void GenerateThumbnail(Image originalImage, string thumbnailPath, int width, int height, ScaleMode mode)
{
using (Image image = GenerateThumbnail(originalImage, width, height, mode))
{
image.Save(thumbnailPath, ImageFormat.Jpeg);
}
} /// <summary>
/// 生成缩略图
/// </summary>
/// <param name="originalImage">源图</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式</param>
/// <returns>生成的缩略图</returns>
public static Image GenerateThumbnail(Image originalImage, int width, int height, ScaleMode mode)
{
int towidth = width;
int toheight = height; int x = ;
int y = ;
int ow = originalImage.Width;
int oh = originalImage.Height; #region // 计算缩略图宽高
switch (mode)
{
default:
case ScaleMode.Normal: { break; }
case ScaleMode.Height:
{
toheight = originalImage.Height * width / originalImage.Width;
break;
}
case ScaleMode.Width:
{
towidth = originalImage.Width * height / originalImage.Height;
break;
}
case ScaleMode.Cut:
{
if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
{
oh = originalImage.Height;
ow = originalImage.Height * towidth / toheight;
y = ;
x = (originalImage.Width - ow) / ;
}
else
{
ow = originalImage.Width;
oh = originalImage.Width * height / towidth;
x = ;
y = (originalImage.Height - oh) / ;
}
break;
}
}
#endregion //新建一个bmp图片
Image bitmap = new System.Drawing.Bitmap(towidth, toheight); //新建一个画板
using (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(, , towidth, toheight), new Rectangle(x, y, ow, oh), GraphicsUnit.Pixel);
} // 返回生成的缩略图
return bitmap;
} /// <summary>
/// 按原像素比例生成一张新图片
/// </summary>
/// <param name="oldImagePath">源图片路径(物理路径)</param>
/// <param name="newImagePath">新图片路径(物理路径)</param>
public static void GenerateNewImage(string oldImagePath, string newImagePath)
{
using (Image originalImage = Image.FromFile(oldImagePath))
{
GenerateNewImage(originalImage, newImagePath);
}
} /// <summary>
/// 按原像素比例生成一张新图片
/// </summary>
/// <param name="oldImage">源图片</param>
/// <param name="newImagePath">新图片路径(物理路径)</param>
public static void GenerateNewImage(Image oldImage, string newImagePath)
{
using (Image image = GenerateNewImage(oldImage))
{
image.Save(newImagePath, ImageFormat.Jpeg);
}
} /// <summary>
/// 按原像素比例生成一张新图片
/// </summary>
/// <param name="oldImage">源图片</param>
/// <returns>新图片</returns>
public static Image GenerateNewImage(Image oldImage)
{
int width = oldImage.Width;
int height = oldImage.Height; //新建一个bmp图片
Image bitmap = new System.Drawing.Bitmap(width, height); //新建一个画板
using (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); //创建矩形
var rectangle = new Rectangle(, , width, height); //在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(oldImage, rectangle, rectangle, GraphicsUnit.Pixel);
} // 返回新图片
return bitmap;
}
}
}

C#图片辅助类,形成缩略图的更多相关文章

  1. PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能

    PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能 网上很多正则表达式只能获取或者替换一个img的src内容,或者只能替换固定的字符串,要动态替换多个图片内容的试了几个小时 ...

  2. C#图片切割、图片压缩、缩略图生成

    C#图片切割.图片压缩.缩略图生成的实现代码 /// 图片切割函数  /// </summary>  /// <param name="sourceFile"&g ...

  3. javascript 图片上传缩略图预览

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  4. PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能

    PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能 网上很多正则表达式只能获取或者替换一个img的src内容,或者只能替换固定的字符串,要动态替换多个图片内容的试了几个小时 ...

  5. centos8上安装ImageMagick6.9.10并压缩图片生成webp缩略图

    一,ImageMagick的作用: ImageMagick 是一个用来创建.编辑.合成图片的软件. 它可以读取.转换.写入多种格式的图片. 功能包括:图片切割.颜色替换.各种效果的应用, 图片的旋转. ...

  6. viewpage滑动查看图片并再有缩略图预览

    首先看下效果图, 主要功能分为3大块 一是滑动查看,通过viewpage来实现,方法见 http://www.cnblogs.com/lovemo1314/p/6109312.html 二.点击放大 ...

  7. Android图片浏览器之缩略图

    项目源码:http://files.cnblogs.com/files/tgyf/app.rar. 最近在自学Android,尝试实现一般手机上都存在的图片浏览器,从缩略图开始. 直接上图,这是goo ...

  8. thinkphp3.2.x版本中图片上传缩略图的解决方案

    调用方式很简单 get_sc($cover_id,[$width=180,$height=auto,$cut]) @param $cover_id 图片ID___ @param $width 宽度__ ...

  9. php之图片处理类缩略图加水印

    用到两个image系统函数 imagecopymerge — 拷贝并合并图像的一部分 imagecopyresampled — 重采样拷贝部分图像并调整大小 /* 如何知道图片的大小和类型 无法确认调 ...

随机推荐

  1. IDEA建立一个可运行的struts2项目

    参考博客:https://blog.csdn.net/shuai_wy/article/details/79027573 直接使用IDEA创建struts2项目,配置好tomcat后是跑不起来的 需要 ...

  2. https://segmentfault.com/a/1190000012844836---------关于SpringBoot上传图片的几种方式

    关于SpringBoot上传图片的几种方式 https://segmentfault.com/a/1190000012844836

  3. 九度oj 题目1046:求最大值

    题目1046:求最大值 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:11782 解决:4789 题目描述: 输入10个数,要求输出其中的最大值. 输入: 测试数据有多组,每组10个数. ...

  4. codevs1226 倒水问题

    题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水.设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水 ...

  5. Hihocoder 1325 (splay)

    Problem 平衡树 Treap 题目大意 维护一个数列,支持两种操作. 操作1:添加一个数x. 操作2:询问不超过x的最大的数. 解题分析 尝试了一下用指针来写splay,感觉写起来还是比较流畅的 ...

  6. MyBatis3-以接口方式编程

    以下内容引用自http://www.yihaomen.com/article/java/304.htm,不过内容有修改: 继前一篇文章http://www.cnblogs.com/EasonJim/p ...

  7. ubuntu 搭建 svn服务器,使用http方式访问

    原文: http://blog.csdn.net/wobuxingfang/article/details/70835414 参考:http://www.cnblogs.com/zzugyl/p/36 ...

  8. vim 安装插件的网站

    我在想, 怎么让vim可以 显示目录结构呢?一个目录里面的文件? vim插件的网站:http://www.vim.org/scripts/script.php?script_id=1658 原文:ht ...

  9. LeetCode 三数之和 — 优化解法

    LeetCode 三数之和 - 改进解法 题目:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复 ...

  10. 为部门整理的mysql_db使用军规

    mysql_db使用军规: 1.禁止开发測试人员在IDC环境手工删除和改动数据 2.全部需求通过DB工具系统提交 3.禁止在IDC环境DB进行測试 4.IDC环境提交的sql语句一定要经过非正式环境验 ...