C# 编写将C:\\TEST及TEST下所有子文件夹的所有图片批量压缩后保存到D:\\TEST及对应子文件夹下
时间: 2023-08-04 18:17:50 浏览: 148
您好,这是一个比较复杂的任务,需要用到 C# 的文件操作和图片压缩等相关知识。以下是一个参考的实现方法,仅供参考:
```csharp
using System;
using System.IO;
using System.Drawing.Imaging;
using System.Drawing;
class Program
{
static void Main(string[] args)
{
// 源文件夹和目标文件夹路径
string sourceFolder = @"C:\TEST";
string targetFolder = @"D:\TEST";
// 批量处理源文件夹下的所有图片
ProcessFolder(sourceFolder, targetFolder);
}
// 批量处理文件夹下的所有图片
static void ProcessFolder(string sourceFolder, string targetFolder)
{
// 压缩后的图片质量
long quality = 70L;
// 处理当前文件夹下的文件
foreach (string file in Directory.GetFiles(sourceFolder))
{
// 判断是否为图片文件
if (IsImageFile(file))
{
// 压缩图片并保存到目标文件夹下
CompressAndSaveImage(file, Path.Combine(targetFolder, Path.GetFileName(file)), quality);
}
}
// 处理当前文件夹下的子文件夹
foreach (string folder in Directory.GetDirectories(sourceFolder))
{
// 创建对应的目标文件夹
string subTargetFolder = Path.Combine(targetFolder, Path.GetFileName(folder));
Directory.CreateDirectory(subTargetFolder);
// 递归处理子文件夹
ProcessFolder(folder, subTargetFolder);
}
}
// 判断文件是否为图片文件
static bool IsImageFile(string file)
{
string ext = Path.GetExtension(file).ToLower();
return ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".bmp";
}
// 压缩图片并保存到目标文件夹下
static void CompressAndSaveImage(string sourceFile, string targetFile, long quality)
{
// 创建图片对象
Image image = Image.FromFile(sourceFile);
// 创建编码器参数
EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, quality);
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = qualityParam;
// 获取文件格式对应的编码器
ImageCodecInfo codecInfo = GetEncoderInfo(Path.GetExtension(targetFile));
// 保存压缩后的图片
image.Save(targetFile, codecInfo, encoderParams);
// 释放资源
image.Dispose();
}
// 获取文件格式对应的编码器
static ImageCodecInfo GetEncoderInfo(string extension)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FilenameExtension.ToLower().Contains(extension.ToLower()))
{
return codec;
}
}
return null;
}
}
```
上述代码中,`ProcessFolder` 方法递归处理文件夹下的所有文件和子文件夹,判断文件是否为图片文件,如果是则调用 `CompressAndSaveImage` 方法对图片进行压缩,并保存到目标文件夹下。`CompressAndSaveImage` 方法中,通过 `Image.FromFile` 方法创建图片对象,使用 `EncoderParameters` 对象设置图片压缩质量,再通过编码器保存压缩后的图片。`GetEncoderInfo` 方法根据文件格式获取对应的编码器。需要注意的是,这只是一个参考实现,您需要根据具体需求进行适当修改。
阅读全文