• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#实现对图片文件的压缩、裁剪操作实例

C#实现对图片文件的压缩、裁剪操作实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#实现文件下载实例,c#web开发实例,c#串口编程实例,c#窗口界面设计实例,c#实例视频教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C#对图片文件的压缩、裁剪操作方法,在C#项目开发中非常有实用价值。分享给大家供大家参考。具体如下:

一般在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便。毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强人意。

于是采用C#为我们提供的图像编辑功能,实现一站式上传,通过程序生成所需大小、尺寸的目标图片。

具体步骤如下:

先说图片压缩:

第一步:需要读取一个图片文件,读取方法:

// <param name="ImageFilePathAndName">图片文件的全路径名称</param> 
public Image ResourceImage =Image.FromFile(ImageFilePathAndName); 

</div>

说明:

Image类:引用自System.Drawing,为源自 Bitmap 和 Metafile 的类提供功能的抽象基类。

主要属性:Size->获取此图像的以像素为单位的宽度和高度。

PhysicalDimension->获取此图像的宽度和高度(如果该图像是位图,以像素为单位返回宽度和高度。如果该图像是图元文件,则以0.01 毫米为单位返回宽度和高度。)。

PixelFormat->获取此 Image 的像素格式。

Height、Width->获取此 Image 的高度、宽度(以像素为单位)。

主要方法:FromFile(String)->从指定的文件创建 Image。

FromStream(Stream)->从指定的数据流创建 Image。

Save(String fileName)->将该 Image 保存到指定的文件或流。

Save(Stream, ImageFormat)->将此图像以指定的格式保存到指定的流中。

Save(String, ImageFormat)->将此 Image 以指定格式保存到指定文件。

更多属性和方法说明请点击。

第二步,生成缩略图,并且将原图内容按指定大小绘制到目标图片。

/// <summary> 
/// 生成缩略图重载方法1,返回缩略图的Image对象 
/// </summary> 
/// <param name="Width">缩略图的宽度</param> 
/// <param name="Height">缩略图的高度</param> 
/// <returns>缩略图的Image对象</returns> 
public Image GetReducedImage(int Width, int Height) 
{ 
  try 
  { 
 //用指定的大小和格式初始化Bitmap类的新实例 
 Bitmap bitmap = new Bitmap(Width, Height, PixelFormat.Format32bppArgb); 
 //从指定的Image对象创建新Graphics对象 
 Graphics graphics = Graphics.FromImage(bitmap); 
 //清除整个绘图面并以透明背景色填充 
 graphics.Clear(Color.Transparent); 
 //在指定位置并且按指定大小绘制原图片对象 
 graphics.DrawImage(ResourceImage, new Rectangle(0, 0, Width, Height)); 
 return bitmap; 
  } 
  catch (Exception e) 
  { 
 ErrMessage = e.Message; 
 return null; 
  } 
} 

</div>

说明:

1、Bitmap类

引用自System.Drawing,封装 GDI+ 位图,此位图由图形图像及其特性的像素数据组成。Bitmap 是用于处理由像素数据定义的图像的对象。

关于封装图像的对象,详细介绍可参看官方文档:http://msdn.microsoft.com/zh-cn/library/system.drawing.bitmap.aspx。

2、Graphics类

引用自System.Drawing,(处理图像的对象),封装一个 GDI+ 绘图图面。

关于Graphics类可点此查看官方教程:http://msdn.microsoft.com/zh-cn/library/system.drawing.graphics.aspx。

第三步,保存

第二步操作中返回的Image对象,暂时命名为:iImage:

iImage.Save(pathAndName, System.Drawing.Imaging.ImageFormat.Jpeg); 

以上是压缩操作,做了下试验,101k的图片,经过压缩后是57k。这个应该和尺寸有关系。

以下是图片裁剪,其实原理和上面相似,无非也就是对图片进行重画操作。

/// <summary> 
/// 截取图片方法 
/// </summary> 
/// <param name="url">图片地址</param> 
/// <param name="beginX">开始位置-X</param> 
/// <param name="beginY">开始位置-Y</param> 
/// <param name="getX">截取宽度</param> 
/// <param name="getY">截取长度</param> 
/// <param name="fileName">文件名称</param> 
/// <param name="savePath">保存路径</param> 
/// <param name="fileExt">后缀名</param> 
public static string CutImage(string url, int beginX, int beginY, int getX, int getY, string fileName, string savePath, string fileExt) 
{ 
  if ((beginX < getX) && (beginY < getY)) 
  { 
 Bitmap bitmap = new Bitmap(url);//原图 
if (((beginX + getX) <= bitmap.Width) && ((beginY + getY) <= bitmap.Height)) 
 { 
   Bitmap destBitmap = new Bitmap(getX, getY);//目标图 
   Rectangle destRect = new Rectangle(0, 0, getX, getY);//矩形容器 
   Rectangle srcRect = new Rectangle(beginX, beginY, getX, getY); 

   Graphics.FromImage(destBitmap); 
            Graphics.DrawImage(bitmap, destRect, srcRect, GraphicsUnit.Pixel); 
    
   ImageFormat format = ImageFormat.Png; 
   switch (fileExt.ToLower()) 
   { 
 case "png": 
   format = ImageFormat.Png; 
   break; 
 case "bmp": 
   format = ImageFormat.Bmp; 
   break; 
 case "gif": 
   format = ImageFormat.Gif; 
   break; 
   } 
   destBitmap.Save(savePath + "//" + fileName , format); 
   return savePath + "\\" + "*" + fileName.Split('.')[0] + "." + fileExt; 
 } 
 else 
 { 
   return "截取范围超出图片范围"; 
 } 
  } 
  else 
  { 
 return "请确认(beginX < getX)&&(beginY < getY)"; 
  } 
} 

</div>

说明:

Rectangle类:矩形,详情可参考官方文档:http://msdn.microsoft.com/zh-cn/library/system.windows.shapes.rectangle(v=vs.85).aspx

以上就是裁剪一个图片文件的示例代码。

本文所使用代码,是项目中真实代码,已经过测试。

希望本文所述对大家的C#程序设计有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#实现文件上传与下载功能实例
  • C#实现的一款比较美观的验证码完整实例
  • C#实现对文件进行加密解密的方法
  • C#实现彻底删除文件的方法
  • C#实现对图片文件的压缩、裁剪操作实例
  • C#实现洗牌游戏实例
  • C#实现关机重启及注销实例代码
  • C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)
  • C#导入导出EXCEL文件的代码实例
  • C#文件操作的简单实例

相关文章

  • 2017-05-28C#中常用的正则表达式实例
  • 2017-05-28C#基础知识之FileStream
  • 2017-05-28C#实现单件模式的三种常用方法
  • 2017-05-28详解二维码生成工厂
  • 2017-05-28C#中把Datatable转换为Json的5个代码实例
  • 2017-05-28C#实现winform渐变效果的方法
  • 2017-05-28C#中DataTable删除行的方法分析
  • 2017-05-28Jquery+Ajax+Json+存储过程实现高效分页
  • 2017-05-28轻松学习C#的读写操作
  • 2017-05-28richtextbox控件插入链接代码分享

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C# 编码好习惯,献给所有热爱c#的同志
    • C#正则表达式匹配HTML中的图片路径,图片地址代码
    • 如何使用C#从word文档中提取图片
    • C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附源码
    • C#实现DataList里面嵌套DataList的折叠菜单
    • c# StringBuilder.Replace 方法 (Char, Char, Int32, Int32)
    • C#操作EXCEL DataTable转换的实例代码
    • C#编程自学之运算符和表达式
    • C#编程和Visual Studio使用技巧(下)
    • C#编程实现取整和取余的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有