用C#开发一个WinForm版的批量图片压缩工具

简介: 我们在实际项目开发过程中,曾经遇到过一个需求,就是要开发一个对大量图片进行整理(删除掉一些不符合要求的图片)、归类(根据格式进行分类,比如jpg格式、bmp格式等)、压缩(因为有的图片很大很占空间,看能否在保证清晰可辨、尺寸适中的前提下,适当的压缩掉一部分空间)的小程序。

我们在实际项目开发过程中,曾经遇到过一个需求,就是要开发一个对大量图片进行整理(删除掉一些不符合要求的图片)、归类(根据格式进行分类,比如jpg格式、bmp格式等)、压缩(因为有的图片很大很占空间,看能否在保证清晰可辨、尺寸适中的前提下,适当的压缩掉一部分空间)的小程序。这里只是重点分享一下如何对图片进行压缩。

我们也不是水平非常高的图像处理专家,但是实际项目中又有这个需求,作为普通的程序员应该如何满足这个要求呢?

很显然,最简单的思路就是适当的缩小原图的尺寸大小或者是适当的降低原图的质量要求,这样就能有效地降低原图所占的空间。

先上一个程序的截图:


我们通过选择图片的原目录以及目标目录,设置好压缩大小和压缩质量,点击开始压缩按钮,即可进行批量图片压缩。

在图片的原目录选择当中,能够遍历根目录下的所有图片(包括子目录下的图片)。

好了,很简单的一个界面,下面我们直接上几段核心代码:

        /// <summary>
        /// 压缩图片方法
        /// </summary>
        /// <param name="sourcePath">原目录</param>
        /// <param name="targetPath">目标目录</param>
        /// <returns>压缩是否成功</returns>
        private bool CompressPicture(string sourcePath, string targetPath)
        {
            try
            {
                double sizeRate = double.Parse(cbSizeRate.Text) / 100;// 大小比率
                int qualityRate = int.Parse(cbQualityRate.Text);// 品质比率

                Image sourceImage = Image.FromFile(sourcePath);
                //调整图片大小
                Bitmap bmp = new Bitmap(sourceImage, new Size((int)(sourceImage.Width * sizeRate), (int)(sourceImage.Height * sizeRate)));
                //压缩图片
                SaveAsJPEG(bmp, targetPath, qualityRate);

                GC.Collect();
                return true;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// 保存为JPEG格式,支持压缩质量选项
        /// </summary>
        /// <param name="bmp">原始位图</param>
        /// <param name="FileName">新文件地址</param>
        /// <param name="Qty">压缩质量,越大越好,文件也越大(0-100)</param>
        /// <returns>成功标志</returns>
        public static bool SaveAsJPEG(Bitmap bmp, string FileName, int Qty)
        {
            try
            {
                EncoderParameter p;
                EncoderParameters ps;

                ps = new EncoderParameters(1);

                p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qty);
                ps.Param[0] = p;

                bmp.Save(FileName, GetCodecInfo("image/jpeg"), ps);

                return true;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// 保存JPG时用
        /// </summary>
        /// <param name="mimeType"></param>
        /// <returns>得到指定mimeType的ImageCodecInfo</returns>
        private static ImageCodecInfo GetCodecInfo(string mimeType)
        {
            ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
            foreach (ImageCodecInfo ici in CodecInfo)
            {
                if (ici.MimeType == mimeType) return ici;
            }
            return null;
        }
        /// <summary>
        /// 遍历文件
        /// </summary>
        /// <param name="info"></param>
        public void ListFiles(FileSystemInfo info)
        {
            if (!info.Exists) return;
            DirectoryInfo dir = info as DirectoryInfo;
            if (dir == null) return;
            FileSystemInfo[] files = dir.GetFileSystemInfos();
            for (int i = 0; i < files.Length; i++)
            {
                FileInfo file = files[i] as FileInfo;
                if (file != null && file.Name.Trim().LastIndexOf(".") > -1)
                {
                    if (file.Name.Substring(file.Name.LastIndexOf(".")).ToUpper() == ".JPG")
                    {
                        this.lvSourceFolderList.Items.Add(file.FullName);
                        imageList.Add(file.FullName);
                    }
                }
                else
                {
                    ListFiles(files[i]); //对于子目录,进行递归调用
                }
            }
        }
源代码下载地址: WinForm批量图片压缩工具源码

目录
相关文章
|
2天前
|
Web App开发 缓存 前端开发
如何优化前端网页加载速度:最佳实践和工具推荐
本文探讨了如何通过采用最佳实践和利用先进的工具来优化前端网页加载速度。从压缩资源到使用CDN,从减少HTTP请求到利用缓存策略,我们将介绍一系列提高网页性能的技术手段。同时,我们还将推荐一些广受好评的工具,帮助开发者更轻松地实施这些优化策略。
|
15天前
|
缓存 前端开发 JavaScript
如何优化前端网页加载速度:实用技巧大揭秘
在当今互联网时代,快速加载的网页是用户体验的关键。本文将介绍一些实用的前端优化技巧,从减少HTTP请求到使用CDN加速,帮助开发人员提高网页加载速度,提升用户满意度。
|
1月前
|
缓存 前端开发 JavaScript
如何优化前端网页加载速度:7个实用技巧
在当今互联网时代,网页加载速度对用户体验至关重要。本文将介绍7个实用的技巧,帮助前端开发者优化网页加载速度,提升用户体验。从压缩资源到异步加载,从图片优化到缓存策略,这些技巧将帮助你在前端开发中取得更好的效果。
|
机器人 定位技术 计算机视觉
Qt实用技巧:使用Qt加载超大图片的耗时测试
Qt实用技巧:使用Qt加载超大图片的耗时测试
Qt实用技巧:使用Qt加载超大图片的耗时测试
|
测试技术
解决duilib使用zip换肤卡顿的问题(附将资源集成到程序中的操作方法)
转载请说明原出处,谢谢~~        今天在做单子是,客户要求做换肤功能,为此我专门写了一个换肤函数,并且把各种皮肤资源压缩为各个zip文件来换肤。
1049 0
|
存储
批量生成反色图片,用PHOTOSHOP批处理功能。
http://zhidao.baidu.com/link?url=Iz46PDPnEITummTEwo2GtUrK6AeAjlidJ7HtCPJ6NYZJbbllRwNg2iBAcNwF2TYjccPCKvolstw7oRLFKHOP4a   批量生成反色图片,用PHOTOSHOP批处理功能。
2386 0
|
JSON C# 数据格式
【WPF/C#】联网异步获取二进制文件(如图片)的流程
原文:【WPF/C#】联网异步获取二进制文件(如图片)的流程 步骤: 联网异步获取Json数据。 使用Json.NET工具,反序列化Json为对应的实体类,获得该实体类的对象。 从对象身上获取图片路径(实体类中定义了头像图片是string类型的文件路径)。
1302 0
|
C# Windows
WPF 自定义图片剪切器 - 头像剪切(扩展与完善、实时截图)
原文:WPF 自定义图片剪切器 - 头像剪切(扩展与完善、实时截图) 一、说明:上一次写的”WPF 自定义图片剪切器 - 头像剪切。
1282 0
|
图形学
Unity 3D中ToLua-UGUI使用说明、导入Unity流程、制作登陆界面
ToLua制作登录界面 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) 请支持大神开发者:骏擎CP,蒙哥等奔赴在前线的开发前辈们 到官方网站下载,或Unity商店购买: ToLua官方网站 —— 下载资源 1 英文好的朋友,可直接看官方文档。
2533 0