C# 生成图片缩略图
最近项目有部分需求,是关于图片操作部分的, 大致的功能就是图片的保存和展示。但是直接操作原图,程序运行效率太慢。而且如果传输数据量过大的话,可能直接导致调用WCF服务失败的问题。
为了解决这个问题,决定采用缩略图的方法。保存数据的时候保存原图和其缩略图。但主界面展示的时候只加载缩略图,点击缩略图后再显示其原图。这样就避免了一进入主界面就加载大量数据,提高了效率。
那么问题就来了,怎么将原图进行处理变成缩略图呢?
下面提供了一个图片处理的类,用来生成缩略图。对GetReducedImage函数进行4次重载来完成不同的需求。
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;/// <summary>
/// 图片处理类
/// 1、生成缩略图片或按照比例改变图片的大小和画质
/// 2、将生成的缩略图放到指定的目录下
/// </summary>
public class ImageClass
{public Image ResourceImage;private int ImageWidth;private int ImageHeight;public string ErrMessage;/// <summary> /// 类的构造函数 /// </summary> /// <param name="ImageFileName">图片文件的全路径名称</param> public ImageClass(string ImageFileName){ResourceImage = Image.FromFile(ImageFileName);ErrMessage = "";}public bool ThumbnailCallback(){return false;}/// <summary> /// 生成缩略图重载方法1,返回缩略图的Image对象 /// </summary> /// <param name="Width">缩略图的宽度</param> /// <param name="Height">缩略图的高度</param> /// <returns>缩略图的Image对象</returns> public Image GetReducedImage(int Width, int Height){try{Image ReducedImage;Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);return ReducedImage;}catch (Exception e){ErrMessage = e.Message;return null;}}/// <summary> /// 生成缩略图重载方法2,将缩略图文件保存到指定的路径 /// </summary> /// <param name="Width">缩略图的宽度</param> /// <param name="Height">缩略图的高度</param> /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:Images ilename.jpg</param> /// <returns>成功返回true,否则返回false</returns> public bool GetReducedImage(int Width, int Height, string targetFilePath){try{Image ReducedImage;Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);ReducedImage.Dispose();return true;}catch (Exception e){ErrMessage = e.Message;return false;}}/// <summary> /// 生成缩略图重载方法3,返回缩略图的Image对象 /// </summary> /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param> /// <returns>缩略图的Image对象</returns> public Image GetReducedImage(double Percent){try{Image ReducedImage;Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);ImageHeight = Convert.ToInt32(ResourceImage.Width * Percent);ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);return ReducedImage;}catch (Exception e){ErrMessage = e.Message;return null;}}/// <summary> /// 生成缩略图重载方法4,返回缩略图的Image对象 /// </summary> /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param> /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:Images ilename.jpg</param> /// <returns>成功返回true,否则返回false</returns> public bool GetReducedImage(double Percent, string targetFilePath){try{Image ReducedImage;Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);ImageHeight = Convert.ToInt32(ResourceImage.Width * Percent);ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);ReducedImage.Dispose();return true;}catch (Exception e){ErrMessage = e.Message;return false;}}}
效果图:
用GetReducedImage(double Percent)方法测试了一下,传入缩略百分比为 0.05
原图大小为1M,处理后的图片大小仅几十KB,程序运行效率的确提高了不少。
C# 生成图片缩略图相关推荐
- java 图片处理 图片缩略图,java怎么生成图片缩略图,缩小图片,高清图片缩小
java如何生成图片缩略图,缩小图片,高清图片缩小 可以把图片缩小到理想的倍数,也可以根据自己的需要来具体规定图片转化后的大小 对于类型为jpg的图片来说,只需要三个参数就能转化得到自己想要的图片 参 ...
- php图片生成缩略图_PHP生成图片缩略图类示例
本文实例讲述了PHP生成图片缩略图类.分享给大家供大家参考,具体如下: class App_image_helper { protected $imgFileName; protected $imgW ...
- php图片生成缩略图_PHP实现生成图片缩略图函数
本文主要和大家介绍了PHP基于GD库实现的生成图片缩略图函数,涉及php针对图片属性相关操作技巧,需要的朋友可以参考下,希望能帮助到大家. /** * 生成缩略图函数(支持图片格式:gif.jpeg. ...
- php图片缩略图的方法,php生成图片缩略图的方法
本文实例讲述了php生成图片缩略图的方法.分享给大家供大家参考.具体如下: 这里需要用到GD2 library function make_thumb($src,$dest,$desired_widt ...
- php 生成缩略图保存,PHP批量生成图片缩略图的方法
//用PHP批量生成图片缩略图 function mkdirs($dirname,$mode=0777) //创建目录(目录, [模式]) { if(!is_dir($dirname)) { mkdi ...
- (转)PHP生成图片缩略图
注:此功能依赖GD2图形库 最近要用php生成缩略图,在网上找了一下,发现了这篇文章:PHP生成图片缩略图 试用了一下后,发现有这样几个问题: 1.png图片生成的缩略图是jpg格式的 2.png图片 ...
- IOS平台生成图片缩略图的两种方案
2013-04-16 15:48 2574人阅读 评论(0) 收藏 举报 IOS平台生成图片缩略图的两种方案 只写出关键部分,其它部分自己添加既可 1.自动缩放到指定大小 + (UIImage *)t ...
- JAVA生成图片缩略图、JAVA截取图片局部内容
目前,google已经有了更好的处理JAVA图片的工具,请搜索:Thumbnailator package com.ares.image.test;import java.awt.Color; imp ...
- 业界对生成图片缩略图的做法归纳
网站如果有很多用户上传图片(相册,商品图片),一般的做法是将用户图片保存在磁盘上面(数据库中记录图片的地址).用户上传的时候按照原图.中图.小图等各个尺寸都生成一份保存在磁盘上.比如php的网店系统e ...
- php 缩略图生成类,php生成图片缩略图类
/** * @abstract 生成图片的缩略图,可以指定任意尺寸,生成的图片为png格式 * @example * $file = 'test.png'; * $th =new Thumbnail( ...
最新文章
- 【leetcode】1030. Matrix Cells in Distance Order
- 为什么开不了4g网络_为什么4G网络越来越慢?究竟是你手机出了问题还是网络原因?...
- 用Windows Live Writer 2012发博客
- 系统中已安装了vmware,请先卸载干净并重启电脑
- 工作164:对父和混入的理解
- HSRP的初步解析及典型应用2
- JQuery data API实现代码分析
- Python基础-字符串(字符串常用函数/操作/字符串遍历)
- 华中科技大学历年计算机专业分数线,【华中科技大学】历年在各省份各专业的录取分数线...
- requestLayout() improperly called by 出现后的解决方法
- java绘图-绘制图片
- 廖雪峰python教程——第一章 Python基础
- 关于Matlab中Max函数的用法
- java native方法及JNI实例
- 国外电子工程师们国内电子工程师火拼(转)
- IT男青年应该献身文艺女青年的十大理由
- [译] 项目什么时候需要 React 框架呢?
- Tensorflow White Paper(一)
- 读书真的重要吗?(一)
- 解决CentOS启动提示unexpected inconsistency;RUN fsck MANUALLY的问题(断电重启报错)
热门文章
- 计算机点击应用时总是跳到顶端,电脑总是跳出当前应用程序
- php 蓝奏网盘上传文件,教给大家一个蓝奏云高级玩法,如何把文件一键秒上传到蓝奏云网盘...
- android5.1.1版本怎么升级,升级Android 5.1
- 2021/4/29刷题
- Qt修改可执行程序的图标 生成的exe使用自定义的Ico文件
- oem是代工还是贴牌_OEM贴牌和ODM贴牌的区别
- Linux专家警告开源软件日益吸引黑客
- SpringBoot 项目启动时设置 http 代理
- 如何对CAD绘图区域进行设置?
- 循环嵌套之经典图形打印(C语言版)