最近项目有部分需求,是关于图片操作部分的, 大致的功能就是图片的保存和展示。但是直接操作原图,程序运行效率太慢。而且如果传输数据量过大的话,可能直接导致调用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# 生成图片缩略图相关推荐

  1. java 图片处理 图片缩略图,java怎么生成图片缩略图,缩小图片,高清图片缩小

    java如何生成图片缩略图,缩小图片,高清图片缩小 可以把图片缩小到理想的倍数,也可以根据自己的需要来具体规定图片转化后的大小 对于类型为jpg的图片来说,只需要三个参数就能转化得到自己想要的图片 参 ...

  2. php图片生成缩略图_PHP生成图片缩略图类示例

    本文实例讲述了PHP生成图片缩略图类.分享给大家供大家参考,具体如下: class App_image_helper { protected $imgFileName; protected $imgW ...

  3. php图片生成缩略图_PHP实现生成图片缩略图函数

    本文主要和大家介绍了PHP基于GD库实现的生成图片缩略图函数,涉及php针对图片属性相关操作技巧,需要的朋友可以参考下,希望能帮助到大家. /** * 生成缩略图函数(支持图片格式:gif.jpeg. ...

  4. php图片缩略图的方法,php生成图片缩略图的方法

    本文实例讲述了php生成图片缩略图的方法.分享给大家供大家参考.具体如下: 这里需要用到GD2 library function make_thumb($src,$dest,$desired_widt ...

  5. php 生成缩略图保存,PHP批量生成图片缩略图的方法

    //用PHP批量生成图片缩略图 function mkdirs($dirname,$mode=0777) //创建目录(目录, [模式]) { if(!is_dir($dirname)) { mkdi ...

  6. (转)PHP生成图片缩略图

    注:此功能依赖GD2图形库 最近要用php生成缩略图,在网上找了一下,发现了这篇文章:PHP生成图片缩略图 试用了一下后,发现有这样几个问题: 1.png图片生成的缩略图是jpg格式的 2.png图片 ...

  7. IOS平台生成图片缩略图的两种方案

    2013-04-16 15:48 2574人阅读 评论(0) 收藏 举报 IOS平台生成图片缩略图的两种方案 只写出关键部分,其它部分自己添加既可 1.自动缩放到指定大小 + (UIImage *)t ...

  8. JAVA生成图片缩略图、JAVA截取图片局部内容

    目前,google已经有了更好的处理JAVA图片的工具,请搜索:Thumbnailator package com.ares.image.test;import java.awt.Color; imp ...

  9. 业界对生成图片缩略图的做法归纳

    网站如果有很多用户上传图片(相册,商品图片),一般的做法是将用户图片保存在磁盘上面(数据库中记录图片的地址).用户上传的时候按照原图.中图.小图等各个尺寸都生成一份保存在磁盘上.比如php的网店系统e ...

  10. php 缩略图生成类,php生成图片缩略图类

    /** * @abstract 生成图片的缩略图,可以指定任意尺寸,生成的图片为png格式 * @example * $file = 'test.png'; * $th =new Thumbnail( ...

最新文章

  1. 【leetcode】1030. Matrix Cells in Distance Order
  2. 为什么开不了4g网络_为什么4G网络越来越慢?究竟是你手机出了问题还是网络原因?...
  3. 用Windows Live Writer 2012发博客
  4. 系统中已安装了vmware,请先卸载干净并重启电脑
  5. 工作164:对父和混入的理解
  6. HSRP的初步解析及典型应用2
  7. JQuery data API实现代码分析
  8. Python基础-字符串(字符串常用函数/操作/字符串遍历)
  9. 华中科技大学历年计算机专业分数线,【华中科技大学】历年在各省份各专业的录取分数线...
  10. requestLayout() improperly called by 出现后的解决方法
  11. java绘图-绘制图片
  12. 廖雪峰python教程——第一章 Python基础
  13. 关于Matlab中Max函数的用法
  14. java native方法及JNI实例
  15. 国外电子工程师们国内电子工程师火拼(转)
  16. IT男青年应该献身文艺女青年的十大理由
  17. [译] 项目什么时候需要 React 框架呢?
  18. Tensorflow White Paper(一)
  19. 读书真的重要吗?(一)
  20. 解决CentOS启动提示unexpected inconsistency;RUN fsck MANUALLY的问题(断电重启报错)

热门文章

  1. 计算机点击应用时总是跳到顶端,电脑总是跳出当前应用程序
  2. php 蓝奏网盘上传文件,教给大家一个蓝奏云高级玩法,如何把文件一键秒上传到蓝奏云网盘...
  3. android5.1.1版本怎么升级,升级Android 5.1
  4. 2021/4/29刷题
  5. Qt修改可执行程序的图标 生成的exe使用自定义的Ico文件
  6. oem是代工还是贴牌_OEM贴牌和ODM贴牌的区别
  7. Linux专家警告开源软件日益吸引黑客
  8. SpringBoot 项目启动时设置 http 代理
  9. 如何对CAD绘图区域进行设置?
  10. 循环嵌套之经典图形打印(C语言版)