当前位置: 首页 > news >正文

C#生成缩略图

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;

using System.Text;

namespace learun.util

{

public enum ThumbnailMode

{

/// <summary>

/// 指定宽度,高度按照比例缩放

/// </summary>

Width = 0,

/// <summary>

/// 指定高度,宽度按照比例缩放

/// </summary>

Height = 1,

/// <summary>

/// 按照指定的高度和宽度剪裁

/// </summary>

Cut = 2,

/// <summary>

/// 指定宽度,高度按照比例缩放

/// </summary>

None = 3

}

public class PicUtil

{

public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, ThumbnailMode mode)

{

System.Drawing.Image img_OriginalImage = null;

ImageFormat tFormat = null;

try

{

img_OriginalImage = (Bitmap)System.Drawing.Image.FromFile(originalImagePath);

tFormat = img_OriginalImage.RawFormat;

}

catch (Exception ex)

{

if (img_OriginalImage != null)

{

img_OriginalImage.Dispose();

}

throw new Exception("压缩图片:" + originalImagePath + "失败!\r\n" + ex.Message);

}

int i_ToWidth = width;

int i_ToHeight = height;

int x = 0;

int y = 0;

int i_OriginalWidth = img_OriginalImage.Width;

int i_OriginalHeight = img_OriginalImage.Height;

switch (mode)

{

case ThumbnailMode.Width:

i_ToHeight = img_OriginalImage.Height * width / img_OriginalImage.Width;

break;

case ThumbnailMode.Height:

i_ToWidth = img_OriginalImage.Width * height / img_OriginalImage.Height;

break;

case ThumbnailMode.Cut:

if ((double)img_OriginalImage.Width / (double)img_OriginalImage.Height > (double)i_ToWidth / (double)i_ToHeight)

{

i_OriginalHeight = img_OriginalImage.Height;

i_OriginalWidth = img_OriginalImage.Height * i_ToWidth / i_ToHeight;

y = 0;

x = (img_OriginalImage.Width - i_OriginalWidth) / 2;

}

else

{

i_OriginalWidth = img_OriginalImage.Width;

i_OriginalHeight = img_OriginalImage.Width * height / i_ToWidth;

x = 0;

y = (img_OriginalImage.Height - i_OriginalHeight) / 2;

}

break;

default:

break;

}

//新建一个BMP图片

System.Drawing.Image img_BitMap = new System.Drawing.Bitmap(i_ToWidth, i_ToHeight);

//新建一个画板

System.Drawing.Graphics gp = System.Drawing.Graphics.FromImage(img_BitMap);

//设置高质量插值法

gp.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

//设置高质量、低速度呈现平滑程度

gp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

gp.CompositingQuality = CompositingQuality.HighQuality;

//清空画布并以透明背景色填充

gp.Clear(Color.Transparent);

//指定位置并按大小绘制原图片的指定部分

gp.DrawImage(img_OriginalImage, new Rectangle(0, 0, i_ToWidth, i_ToHeight), new Rectangle(x, y, i_OriginalWidth, i_OriginalHeight), GraphicsUnit.Pixel);

try

{

EncoderParameters ep = new EncoderParameters();

long[] qy = new long[1];

qy[0] = 100;//设置压缩的比例1-100

EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);

ep.Param[0] = eParam;

ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();

ImageCodecInfo jpegICIinfo = null;

for (int i = 0; i < arrayICI.Length; i++)

{

if (arrayICI[i].FormatDescription.Equals("JPEG"))

{

jpegICIinfo = arrayICI[i];

break;

}

}

if (jpegICIinfo != null && Equals(tFormat, ImageFormat.Jpeg))

{

//以JPG格式保存图片

img_BitMap.Save(thumbnailPath, jpegICIinfo, ep);

//Const.iSuccessCount++;

}

else

{

img_BitMap.Save(thumbnailPath, tFormat);

//Const.iSuccessCount++;

}

}

catch (Exception ex)

{

Console.WriteLine("复制图片:" + originalImagePath + "失败!\r\n" + ex.Message + ex.StackTrace);

}

finally

{

if (img_OriginalImage != null)

{

img_OriginalImage.Dispose();

}

if (img_BitMap != null)

{

img_BitMap.Dispose();

}

if (gp != null)

{

gp.Dispose();

}

//GC.Collect();

}

}

}

}

http://www.lryc.cn/news/23882.html

相关文章:

  • 算法 # SimHash 算法:文本相似度、文本去重、海量文本快速查询
  • Java程序设计-JSP程序设计-SSM校园二手交易系统
  • springBoot 消息转换器和自定义消息转换器
  • 机器学习笔记之流形模型——标准流模型基本介绍
  • MIT:只需一层RF传感器,就能为AR头显赋予“X光”穿透视力
  • 对 Dom 树的理解
  • 电商搜索入门
  • 4.3.1初阶数据结构(C语言)(无头不循环单链表)
  • 一文深度解读音视频行业技术发展历程
  • 面向对象拓展贴
  • Android仿QQ未读消息拖拽粘性效果
  • Linux 打包压缩解压指令 gzip bzip2 tar
  • 系统升级丨分享返佣,助力商企实现低成本高转化营销
  • 机试代码模板
  • Java性能优化-垃圾回收算法-理解CMS回收器
  • Oracle11G的表空间数据文件大小限制问题处理
  • 计算机三级|网络技术|备考指南|网络系统结构与设计的基本原则|1
  • 基于 TI Sitara系列 AM64x核心板——程序自启动说明
  • 自学5个月Java找到了9K的工作,我的方式值得大家借鉴 第一部分
  • 微电影广告的内容突破方案
  • 茌平区为什么越来越多的企业由请高新技术企业?山东同邦科技分享
  • 谷歌优化排名怎么做出来的?谷歌排名多久做上去?
  • 字节跳动青训营--Webpack
  • 微信多媒体文件speex格式转为mp3文件格式
  • IAP初探
  • 【组织架构】中国铁路兰州局集团有限公司
  • 【计算机三级网络技术】 第四篇 路由设计技术基础
  • 嵌入式工程师进阶,基于AM64x开发板的IPC多核开发案例分享
  • 腾讯安全与锐捷网络战略合作,威胁情报能力“被集成”
  • 接口自动化测试用例详解