public void CompressImages(string folderPath, int compressionLevel)
{
string[] imageFiles = Directory.GetFiles(folderPath, "*.png", SearchOption.AllDirectories)
.Concat(Directory.GetFiles(folderPath, "*.jpg", SearchOption.AllDirectories))
.ToArray();
foreach (string imageFile in imageFiles)
{
using (Image image = Image.FromFile(imageFile))
{
string outputPath = Path.GetDirectoryName(imageFile);
string outputFileName = Path.GetFileNameWithoutExtension(imageFile) + "_compressed" + Path.GetExtension(imageFile);
string outputFile = Path.Combine(outputPath, outputFileName);
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compressionLevel);
ImageCodecInfo imageEncoder = GetEncoder(ImageFormat.Jpeg); // 根据需要压缩的图片格式选择适当的 ImageCodecInfo
image.Save(outputFile, imageEncoder, encoderParams);
}
}
}
private ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}