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)";
            }
        }

时间: 2024-07-30 00:35:39

C#对图片文件的压缩、裁剪操作的相关文章

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

在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便.毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强人意. 于是采用C#为我们提供的图像编辑功能,实现一站式上传,通过程序生成所需大小.尺寸的目标图片. 进入正题--> 先说图片压缩 第一步:需要读取一个图片文件,读取方法: // <param name="ImageFilePathAndName">图片文件的全路径名称&

谁能帮我解码图片,数组里面四张图片!希望使用BASE64对图片文件数据进行解码操作

{"images":[{"imageData":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4 JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O

通过Nginx访问FastDFS文件系统并进行图片文件裁剪的性能测试和分析

前段时间公司的分布式图片文件系统(FastDFS)做了图片裁剪和缩放功能,并把缩放计算和FastDFS做了解耦分离,前端用虚拟机作为图片文件缩放的访问代理层(Nginx Proxy),后端使用nginx直接访问FastDFS的文件系统.以下是测试和分析过程. 1测试场景 为了测试解耦后的图片读取并发和分析系统瓶颈,我们在内网中搭建了一个测试环境.以下是测试环境的网络的物理架构图: 上图中: NginxProxy:CPU解耦后的图片裁剪代理服务器 Storage:图片的存储服务器 ab:图片访问的

PHP操作MongoDB GridFS 存储文件,如图片文件

GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容,文件内容按一定大小分成若干块,每一块存在一个Document中,这种方法不仅提供了文件存储,还提供了对文件相关的一些附加属性(比如MD5值,文件名等等)的存储. 01 <?php 02 // 初始化gridfs 03 $conn = new Mongo(); // 连接MongoDB 04 $db

linux(3)磁盘与文件系统管理/查看硬盘、内存空间/文件系统的操作/ 文件的压缩和打包

一.磁盘与文件系统管理 1.分区与文件系统分区:记录每一个分区的开始柱面和结束柱面主引导区(master boot recorder):记录分区的数据,记录硬盘里所有的分区信息分区划分好后,要将分区格式化为系统可以识别的文件系统磁盘的最小物理存储单位是:扇区分区时格式化文件系统的最小存储单位:逻辑块,以扇区为基础,大小为2的n次方,但是一个块只能容纳一个文件linux的ext2文件系统每个文件内容分为两部分:存储文件的属性(放在inode中),文件的内容(放在块中) 例: 读取文件系统的信息:

【荐】PHP操作MongoDB GridFS 存储文件,如图片文件

GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容,文件内容按一定大小分成若干块,每一块存在一个Document中,这种方法不仅提供了文件存储,还提供了对文件相关的一些附加属性(比如MD5值,文件名等等)的存储. <?php // 初始化gridfs $conn = new Mongo(); // 连接MongoDB $db = $conn->ph

图片文件如何进行在线压缩,在线压缩的方法

图片怎么进行压缩,而且还是在线的压缩,很多的时候我们会遇到各种各样的图片文件,随着时间一长,图片增加,我们的电脑手机就有卡顿的情况,图片不可以删除的话可以进行在线压缩,下面教给大家一种在线压缩软件的操作方法. 1:首先在浏览器搜索图片压缩,找到一个图片压缩网站,进入到网站的首页. 2:进入到首页后,在首页导航栏的位置找到文档处理,在文档处理的底部位置可以看到图片压缩. 3:点击图片压缩进入到压缩的页面,进入压缩页面后,点击选择文件,选择需要进行压缩的图片文件. 4:选择文件后,在选择文件下面可以

压缩图片大小的软件怎么使用,怎么压缩图片文件

图片的压缩软件怎么使用呢?很多人不知道图片压缩软件的使用方法,很多的图片文件就会进行搁置,对于压缩软件来讲,找到比较好的图片压缩软件也是对自己的图片文件负责,下面就为大家介绍一款图片压缩软件的使用方法. 1:首先要将自己的图片文件准备好,放在指定的文件夹中,如果是一张图片的话可以直接放在电脑的桌面. 2:将压缩软件安装到自己的电脑中,打开这款压缩软件,找到图片压缩,进入到压缩的页面. 3:进入到压缩页面后,会看到压缩的选项以及压缩的输出格式,将压缩选项以及输出格式调整到自己需要的选项即可. 4:

对于PDF文件压缩怎么操作? PDF文件压缩攻略

PDF文件压缩怎么操作呢?在我们日常工作中,由于工作性质的不同,所要使用到为文件都有大小的限制.如果是在处理PDF文件,需要你将它压缩成比较小的PDF文件,对于其它文件的压缩可能都遇到过,PDF文件就很少有人处理过,下面分享一种PDF文件压缩攻略交给大家! 1.首先压缩PDF文件的话大家可以在浏览器中搜索到PDF压缩工具,然后将它安装到操作的电脑中,考虑到每个工具操作工具方法不同,建议大家使用到同一款软件.2.进入到PDF工具中,可以看到软件界面中分布层次分明,然后可以移动鼠标到左侧"PDF的其