好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#对图片文件的压缩、裁剪操作初探

C#对图片文件的压缩、裁剪操作初探

C#对图片文件的压缩、裁剪操作初探

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

于是采用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类:矩形,详情 请点此 。
以上是裁剪一个图片文件的示例代码。

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

希望和大家交流共同学习。

 

 

分类:  C#课堂 ,  随笔

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于C#对图片文件的压缩、裁剪操作初探的详细内容...

  阅读:42次

上一篇: Mac技巧索引

下一篇:谈AOP要step by step