在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便。毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强人意。
于是采用C#为我们提供的图像编辑功能,实现一站式上传,通过程序生成所需大小、尺寸的目标图片。
进入正题-->
先说图片压缩
第一步:需要读取一个图片文件,读取方法:
// <param name="ImageFilePathAndName">图片文件的全路径名称</param>
public Image ResourceImage =Image.FromFile(ImageFilePathAndName);
说明:
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;
}
}
说明: 1、Bitmap类
引用自System.Drawing,封装 GDI+ 位图,此位图由图形图像及其特性的像素数据组成。Bitmap是用于处理由像素数据定义的图像的对象。
(封装图像的对象),详细介绍请点此。
2、Graphics类
引用自System.Drawing,(处理图像的对象),封装一个 GDI+ 绘图图面。
详情请点此。
第三步,保存
第二步操作中返回的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)";
}
}
说明:
Rectangle类:矩形,详情请点此。
以上是裁剪一个图片文件的示例代码。
本文所使用代码,是项目中真实代码,已经过测试。
希望和大家交流共同学习。
原文地址
http://www.cnblogs.com/xyang/archive/2013/02/25/2932145.html
分享到:
相关推荐
C#/Core下,最完美的图片压缩,支持各种图片格式,无损压缩,无损剪切,按尺寸/比例压缩、剪切图片,根据自己需要任意处理图片
代码实现了扫描文件夹下面的图片,将指定大小的图片进行裁剪,缩放,并覆盖原图片。
C#-文件压缩操作类(指定文件压缩、指定多文件压缩、压缩包解压)
C# 文件压缩-指定文件压缩
c#图片裁剪效果c#图片裁剪效果c#图片裁剪效果c#图片裁剪效果
C#图片无损压缩高效
C#图片剪裁例子_ C#裁剪图片的特殊区域例子
c# 图像裁剪 压缩 鼠标操作
像Photoshop一样裁剪图片,鼠标拖动裁剪, 可在进行缩放或者没有缩放的图片上进行原图按比例裁剪,操作或PS一样,按住鼠标左键拖动。 内含有纠偏算法,亮度调整,对比度调整算法。
Grearo图片压缩工具 功能介绍【必读】: 1 图片批量压缩(30以内,依个人机器以及被压缩图片大小而定); 2 图片限定宽度,等比例压缩; 3 图片限定高度,等比例压缩; 4 图片限定高度,宽度压缩;...
C# 操作压缩文件 文件+ 例子 希望大家能喜欢
简单实用的图片裁剪工具,多线程滚动条,利用率低,自行设置裁剪参数。
c# 处理图片源码 缩放 裁剪 等c# 处理图片源码 缩放 裁剪 等c# 处理图片源码 缩放 裁剪 等c# 处理图片源码 缩放 裁剪 等
用DotNet自带的命名空间Commpression类实现的,支持大于2G文件。测试通过,供参考吧。
C# rar 文件压缩 .net 压缩文件 RAR
主要介绍了C#实现对图片文件的压缩、裁剪操作,较为详细的介绍了操作过程中用到的相关类文件及具体的操作步骤,是非常实用的技巧,需要的朋友可以参考下
c#版文件压缩,支持单个文件、多个文件、文件夹的压缩解压等操作,引入代码直接可以用
利用C#实现文件压缩 并生成文件的xml文档说明
本程序完全用C#编写,实现了解压缩、压缩单个文件、压缩文件夹功能
使用C#完成的图像压缩,实现质量压缩,大小压缩,批量压缩。可选择读取图像输出到另一图像,可实现从界面中读取图像输出到图像,附全部代码+注释+开发过程。