我们在实际项目开发过程中,曾经遇到过一个需求,就是要开发一个对大量图片进行整理(删除掉一些不符合要求的图片)、归类(根据格式进行分类,比如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批量图片压缩工具源码
分享到:
相关推荐
WinForm批量图片压缩工具源代码,一个非常好的WinForm学习例子。
C#编程 WinForm窗体开发 ChineseCode(源码)C#编程 WinForm窗体开发 ChineseCode(源码)C#编程 WinForm窗体开发 ChineseCode(源码)C#编程 WinForm窗体开发 ChineseCode(源码)C#编程 WinForm窗体开发 ChineseCode(源码)...
这是自己查了点资料写的一个用C#实现的压缩工具。其中实现压缩的函数是CompressImage(),可以实现规定高度宽度,指定图片保存质量的缩放。主要用的是GDI+实现的,用winform进行了展示,方便使用。
Grearo图片压缩工具 功能介绍【必读】: 1 图片批量压缩(30以内,依个人机器以及被压缩图片大小而定); 2 图片限定宽度,等比例压缩; 3 图片限定高度,等比例压缩; 4 图片限定高度,宽度压缩;...
C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm...
C#实现winform压缩解压文件夹
批量图片压缩工具,采用C#+WinForm方式开发,可以选择文件夹、设置压缩后图片的长宽和压缩率。
C# 只能运行一个winForm进程 C# 只能运行一个winForm进程 C# 只能运行一个winForm进程
C#编程 WinForm窗体开发 DropDownList(源码)C#编程 WinForm窗体开发 DropDownList(源码)C#编程 WinForm窗体开发 DropDownList(源码)C#编程 WinForm窗体开发 DropDownList(源码)C#编程 WinForm窗体开发 DropDownList...
winform 图片压缩
c# winform ListView实现图片浏览
结合网上的一些源码和书上的源码弄了个C#开发的winform的简易图片放大缩小。功能:打开图片,支持放大和缩小功能,一开始能展现全图,能无限放大和缩小到原图。保持居中展示。滚动条保持居中。还有一个可以旋转的请...
C#winform窗体2种上传图片方法,附有源码,可自行修改,亦可修改上传格式达到上传文件效果
一款还不错的C#winform开发框架,对于想学习C#框架的初学者来说,是很值得借鉴的
C# 开发全套31个UI组件Winform 开源共享 开源 控件
C# WinForm 实践开发教程,很详细的一本书,想学习C# WinForm开发的必备书籍
c#批量换皮肤winform代码示例 写了几个控件的换肤方式,只是一个例子,大家看了以后就知道怎么写了。
C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码...
1、采用winform 开发,批量删除指定文件和文件夹,批量修改文件名称,批量修改文件夹名称,批量修改文件内容,批量查找并替换文件,指定查找多对多覆盖文件。图片识别文字,word转html 对于大量文件处理,很实用。...
C#编程 WinForm窗体开发 ControlFormStatus(源码)C#编程 WinForm窗体开发 ControlFormStatus(源码)C#编程 WinForm窗体开发 ControlFormStatus(源码)C#编程 WinForm窗体开发 ControlFormStatus(源码)C#编程 WinForm...