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

 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. PAT 1142 Maximal Clique

    A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the ...

  2. Spring AOP学习(六)

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  3. 如何用Bugzilla系统管理产品研发过中相关需求和bug

    目 录 1.Bug处理流程及状态说明 2.bugs字段说明 3.查询报表的使用 4.bug系统与需求系统的整合 5.流程和用户权限 1. Bug处理流程及状态说明(1) BUG状态流程图 BUG的状态 ...

  4. 纯JSP实现简单微信开发后台

    %@ page import="java.net.*" % %@ page import="java.math.*" % %@ page import=&quo ...

  5. codevs1174 靶形数独

    题目描述 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士 ...

  6. NYOJ35 表达式求值

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式 ...

  7. 1. 数组之差TapeEquilibrium Minimize the value |(A[0] + ... + A[P-1]) - (A[P] + ... + A[N-1])|.

    数组之差 package com.code; public class Test03_3 { public static int solution(int[] A) { int size = A.le ...

  8. OpenCV2马拉松第25圈——直线拟合与RANSAC算法

    计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/28118095 收入囊中 最小二乘法(least ...

  9. express的路由

    就是 app.get().app.post().app.all()啦,啦啦啦 (其中,var express = require("express"); var app = exp ...

  10. 1250 Fibonacci数列

    1250 Fibonacci数列  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 定义:f ...