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

 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. Microsoft 根证书计划弃用 SHA-1 哈希算法

    Microsoft 根证书计划弃用 SHA-1 哈希算法 微软官方2016年1月12日发布安全通报,自2016年1月1日起Microsoft 已经发布代码弃用变更,也就是说2016年1月1号后用SHA ...

  2. 【16】AngularJS API

    AngularJS API API 意为 Application Programming Interface(应用程序编程接口). AngularJS 全局 API AngularJS 全局 API ...

  3. MySql 执行计划解读

    说明 解读执行计划l对于我们日常工作中慢sql的分析和调优有很大帮助,同时在解读的过程中也能知道如何规避慢sql 建议需要了解join匹配原理的知识:https://www.cnblogs.com/L ...

  4. Python学习笔记 (2.1)标准数据类型之Number(数字)

    Python3中,数字分为四种——int,float,bool,complex int(整型) 和数学上的整数表示没啥区别,没有大小限制(多棒啊,不用写整数高精了),可正可负.还可表示16进制,以 0 ...

  5. 最接近的点配对(分治问题理解) && HDU 1007代码

    题目大意: 给定一堆点集,在这一堆点集中找到一组点集它们之间的距离达到最短 对于HDU1007因为求圆的半径,所以距离还要除以2 普通情况下,可以将nge点,将任意两个点之间的距离都算一遍,在循环过程 ...

  6. html缓存机制,http头部控制

    1.缓存分类:服务器缓存(协商缓存),第三方缓存,浏览器缓存(强制缓存) 2.浏览器缓存(添加 meta),设置请求指定的http头部信息.(状态码200,from cache , from dist ...

  7. DELPHI新版本WEBSERVICE的变化

    DELPHI新版本WEBSERVICE,不仅可以编译成ISAPI DLL,依靠IIS部署, 并且还可以编译成单独的EXE,不再依赖IIS就可以独立运行,这一点未尝不可以说是非常方便的改进.

  8. 【CV论文阅读】Two stream convolutional Networks for action recognition in Vedios

    论文的三个贡献 (1)提出了two-stream结构的CNN,由空间和时间两个维度的网络组成. (2)使用多帧的密集光流场作为训练输入,可以提取动作的信息. (3)利用了多任务训练的方法把两个数据集联 ...

  9. LeetCode240:Search a 2D Matrix II

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  10. 京东电商API

    大家好~~2016年了~转眼过去三年了...一年没有更新博客了.. ..在上一年里,遇到了几个好哥们,一起写程序一起装逼,以下给大家讲述一下工作上遇到的技术问题,由于这个我開始弄的时候也比較麻烦,不知 ...