C# 批量压缩文件夹下的指定文件夹内的图片,并保存
时间: 2024-02-11 19:03:42 浏览: 22
你可以使用C#的System.IO.Compression和System.Drawing.Imaging命名空间来实现批量压缩文件夹下的指定文件夹内的图片,并保存。以下是一个简单的示例代码:
```csharp
using System.IO.Compression;
using System.Drawing.Imaging;
string sourceFolder = @"C:\Images"; // 源文件夹路径
string targetFolder = @"C:\Compressed"; // 目标文件夹路径
string subFolder = "SubFolderName"; // 指定要压缩的子文件夹名称
if (!Directory.Exists(targetFolder))
{
Directory.CreateDirectory(targetFolder);
}
string[] subFolders = Directory.GetDirectories(sourceFolder, subFolder, SearchOption.AllDirectories);
foreach (string folder in subFolders)
{
string targetSubFolder = Path.Combine(targetFolder, Path.GetDirectoryName(folder));
Directory.CreateDirectory(targetSubFolder);
string[] files = Directory.GetFiles(folder, "*.jpg", SearchOption.TopDirectoryOnly);
foreach (string file in files)
{
string targetFile = Path.Combine(targetSubFolder, Path.GetFileName(file));
using (var bitmap = new System.Drawing.Bitmap(file))
{
var encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 50L);
bitmap.Save(targetFile, GetEncoderInfo("image/jpeg"), encoderParams);
}
}
}
// 获取JPEG编码器的信息
private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
var codecs = ImageCodecInfo.GetImageEncoders();
foreach (var codec in codecs)
{
if (codec.MimeType == mimeType)
{
return codec;
}
}
return null;
}
```
这段代码会在源文件夹下查找所有名称为"SubFolderName"的子文件夹,并批量压缩其中所有的.jpg文件,压缩后的文件保存在目标文件夹下,文件名和目录结构与源文件夹相同。你可以根据需要修改文件夹路径、子文件夹名称、文件类型和压缩质量等参数。