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

简介:

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

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

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

先上一个程序的截图:

Center

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/// <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 ;
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/// <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 ;
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/// <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 ;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/// <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批量图片压缩工具源码



本文转自 guwei4037  51CTO博客,原文链接:http://blog.51cto.com/csharper/1330029


相关文章
|
2月前
|
自然语言处理 C# Windows
C#开源免费的Windows右键菜单管理工具
C#开源免费的Windows右键菜单管理工具
|
2月前
|
SQL 数据库连接 应用服务中间件
C#WinForm基础编程(三)
C#WinForm基础编程
71 0
|
2月前
C#WinForm基础编程(二)
C#WinForm基础编程
55 0
|
2月前
|
C# 数据安全/隐私保护
C#WinForm基础编程(一)
C#WinForm基础编程
59 0
|
3天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
1月前
|
C# 开发者
35.c#:winform窗口
35.c#:winform窗口
10 1
|
1月前
|
数据挖掘 C# 开发工具
采用C#语言开发的全套医院体检系统PEIS源码功能介绍
体检系统,是专为体检中心/医院体检科等体检机构,专门开发的全流程管理系统,通过软件实现检测仪器数据自动提取,内置多级医生工作台,细化工作将体检检查结果汇总,生成体检报告登记到计算机系统中。通过软件系统进行数据分析统计与评判以及建立体检相关的体检档案。从而实现体检流程的信息化,提高工作效率,减少手动结果录入的一些常犯错误。 在实际应用中,医院体检系统能够解决传统体检中手工操作带来的问题,如工作量大、效率低下、易漏检、重检或错检等。通过与医院信息系统(如HIS、LIS、PACS等)的连接,系统能够满足体检中心的日常工作流程,提供更好的管理、统计和查询分析功能。同时,基于网络基础的系统可以在网上传输
23 1
|
2月前
|
C#
C# Winform 选择文件夹和选择文件
C# Winform 选择文件夹和选择文件
43 0
|
3月前
|
存储 C#
C#入门开发(Hello World,运算符)
C#入门开发(Hello World,运算符)
27 0
|
3月前
|
存储 安全 算法
C# 泛型:类型参数化的强大工具
【1月更文挑战第7天】本文将深入探讨C#语言中的泛型编程,包括泛型的定义、用途、优势以及实际应用。通过类型参数化,泛型允许开发者编写更加灵活且可重用的代码,同时提高程序的类型安全性和性能。本文将通过示例代码和详细解释,帮助读者更好地理解泛型在C#中的重要性和实用性。