博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#对图片文件的压缩、裁剪操作初探
阅读量:6485 次
发布时间:2019-06-23

本文共 3869 字,大约阅读时间需要 12 分钟。

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

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

进入正题-->

先说图片压缩

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

// 图片文件的全路径名称
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 以指定格式保存到指定文件。

更多属性和方法说明。

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

///         /// 生成缩略图重载方法1,返回缩略图的Image对象        ///         /// 缩略图的宽度        /// 缩略图的高度        /// 
缩略图的Image对象
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。这个应该和尺寸有关系。

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

///         /// 截取图片方法        ///         /// 图片地址        /// 开始位置-X        /// 开始位置-Y        /// 截取宽度        /// 截取长度        /// 文件名称        /// 保存路径        /// 后缀名        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://sciuo.baihongyu.com/

你可能感兴趣的文章
python教程
查看>>
PM2实用入门指南
查看>>
XAMPP安装过程中,出现的问题
查看>>
第二章 Joomla 扩展开发:入门
查看>>
C语言-从声卡录音的一个demo
查看>>
HDU2094 考新郎
查看>>
存储器层次结构 --《深入理解计算机系统》第六章读书笔记
查看>>
bzoj2096
查看>>
CAS—认证原理
查看>>
SPOJ:NSUBSTR - Substrings
查看>>
iOS - 毛玻璃效果封装
查看>>
Android 利用 aapt 解析 apk 得到应用名称 包名 版本号 权限等信息
查看>>
SSM-SpringMVC-25:SpringMVC异常顶级之自定义异常解析器
查看>>
Datesheet 参数手册
查看>>
算法工程师面试题
查看>>
DNS预解析prefetch
查看>>
Spring boot --- Spring Oauth(一)
查看>>
HDOJ-1052 Tian Ji -- The Horse Racing
查看>>
Servlet认识,servlet小程序,doGet,doPost
查看>>
浅谈JS中的typeof和instanceof的区别
查看>>