基于 System.Drawing 实现图片尺寸缩放和质量压缩,支持常见格式。
using System.Drawing; using System.Drawing.Imaging; public class ImageCompressor { // 压缩图片(按尺寸缩放+质量调整) public static bool CompressImage(string sourcePath, string outputPath, int maxWidth, int maxHeight, long quality = 70) { try { using (Image originalImage = Image.FromFile(sourcePath)) { // 计算缩放比例 float scale = Math.Min((float)maxWidth / originalImage.Width, (float)maxHeight / originalImage.Height); int newWidth = (int)(originalImage.Width * scale); int newHeight = (int)(originalImage.Height * scale); // 创建新位图 using (Bitmap newBitmap = new Bitmap(newWidth, newHeight)) using (Graphics g = Graphics.FromImage(newBitmap)) { g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.DrawImage(originalImage, 0, 0, newWidth, newHeight); // 设置压缩质量 EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, quality); ImageCodecInfo jpegCodec = ImageCodecInfo.GetImageDecoders() .First(c => c.FormatID == ImageFormat.Jpeg.Guid); EncoderParameters encoderParams = new EncoderParameters(1); encoderParams.Param[0] = qualityParam; // 保存压缩后的图片 newBitmap.Save(outputPath, jpegCodec, encoderParams); } } Console.WriteLine("图片压缩成功!"); return true; } catch (Exception ex) { Console.WriteLine($"压缩失败: {ex.Message}"); return false; } } // 调用示例 public static void TestCompress() { CompressImage("source.jpg", "output_compressed.jpg", 800, 600, 60); } }
注意:.NET Core/.NET 5+ 需安装 System.Drawing.Common NuGet 包。