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

 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. docker CE 的安装

    一.Docker CE的安装1.先决条件运行环境:Ubuntu 64位或者其他支持Docker的64位系统运行配置,linux内核版本必须大于 3.10,否则会因为缺少容器运行所需的功能而出错. 2. ...

  2. DESEncrypt对称加密解密

    分享一个很好用的DESEncrypt对称加密解密的类 using System; using System.Security.Cryptography; using System.Text; usin ...

  3. HTTP 请求的 GET 与 POST 方式的区别

    HTTP 请求的 GET 与 POST 方式的区别 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST. GET - 从指定的资源请求数据. POST - 向指定的资源 ...

  4. [luoguP1072] Hankson 的趣味题(数论)

    传送门 由题意得 gcd(x, a0) = a1 ——> gcd(x / a1, a0 / a1) = 1 lcm(x, b0) = b1 ——> x * b0 / gcd(x, b0) ...

  5. noip模拟赛 算

    [问题背景]zhx 帮他妹子做数学题.[问题描述]求: 如 N=3, M=3, 这个值为 1^1+1^2+1^3+2^1+2^2+2^3+3^1+3^2+3^3=56. [输入格式]仅一行, 包含两个 ...

  6. CentOS redis安装配置

    编译依赖安装 yum install gcc-c++ yum install -y tcl 安装步骤 下载:wget http://download.redis.io/releases/redis-5 ...

  7. CentOS设置程序开机启动程序/服务的方法(转)

    注意:CentOS 6下基本没什么问题,CentOS 7估计不一定能行. 在CentOS系统下,主要有两种方法设置自己安装的程序开机启动. 1.把启动程序的命令添加到/etc/rc.d/rc.loca ...

  8. Spring Boot中使用Swagger2生成RESTful API文档(转)

    效果如下图所示: 添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <!-- https://mvnrepository.com/artifact/io.springfox ...

  9. Java - this的使用方法

    this在内部获得当前对象的引用时调用: (1) return返回当前对象; (2) 构造器调用还有一个构造器, 带參数; (3) 參数的名称和数据成员的名称同样; 注意: this构造器在方法中仅仅 ...

  10. 闲聊ROOT权限——ROOT权限的前世今生

    近期工作一直非常忙.居然慢慢地疏远了CSDN的博客,然而在工作中遇到问题,又会被多次的引导至CSDN,故笔者抽出时间也将自己学习的成果与大家分享在这里,希望能帮助到须要帮助的人. 本文将从几个方面,由 ...