C# 在 Windows 平台压缩图片
下面是一个简单的使用示例:
/// <summary>
/// 对图像流进行压缩,并返回压缩后的图像流。
/// </summary>
/// <param name="originalStream">原始图像的流。</param>
/// <param name="targetQuality">目标压缩质量。(1,100)</param>
/// <returns>压缩后的图像流。</returns>
public static Stream SystemDrawingCompressImage(Stream originalStream, long targetQuality)
{
// 使用 using 语句确保图像资源在使用后正确释放
using var originalImage = Image.FromStream(originalStream);
// 创建一个与原始图像大小相同的位图对象
var compressedImage = new Bitmap(originalImage.Width, originalImage.Height);
// 使用 Graphics 对象绘制原始图像到位图对象中
using (var graphics = Graphics.FromImage(compressedImage))
{
graphics.DrawImage(originalImage, 0, 0, originalImage.Width, originalImage.Height);
}
// 创建编码器参数,指定压缩质量
var encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, targetQuality);
// 获取 JPEG 编码器信息
var jpegEncoderInfo = ImageCodecInfo.GetImageEncoders()
.FirstOrDefault(encoder => encoder.FormatID == ImageFormat.Jpeg.Guid);
// 创建一个内存流用于保存压缩后的图像
var compressedStream = new MemoryStream();
// 如果 JPEG 编码器信息不为空,将压缩后的图像保存到内存流中
if (jpegEncoderInfo != null)
{
compressedImage.Save(compressedStream, jpegEncoderInfo, encoderParameters);
}
// 将内存流的位置重置为起始位置,以便读取压缩后的图像
compressedStream.Position = 0;
// 返回压缩后的图像流
return compressedStream;
}