您现在的位置是:首页 >其他 >C# 压缩图片并保存到本地网站首页其他
C# 压缩图片并保存到本地
简介c# png图片压缩
本文主要介绍如何使用C#将图片进行压缩并保存到本地。
接收一个原始图片的字节数组、需要保存的图片类型、输出路径和图片质量。方法首先将字节数组转换为一个内存流,然后使用Image.FromStream
方法将内存流转换为一个Image对象。接下来,方法创建一个编码参数对象,设置图片的质量。之后,通过调用GetImageCodecInfo
方法获取指定图片类型对应的编码器信息。最后,调用image.Save
方法将压缩后的图片保存到指定的输出路径。
/// <summary>
/// 压缩图片byte数组并保存到本地
/// </summary>
/// <param name="bytes">原始图片byte数组</param>
/// <param name="format">需要保存图片的MIME类型</param>
/// <param name="outputPath">输出路径</param>
/// <param name="quality">图片质量0-100</param>
private void CompressImage(byte[] bytes, ImageFormat format, string outputPath, long quality)
{
using (MemoryStream ms = new MemoryStream(bytes))
{
Image image = Image.FromStream(ms);
// 创建一个编码参数对象
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, quality); // 100表示最高质量(无损)
var pngCodec = GetImageCodecInfo(format);
// 保存压缩后的图片
image.Save(outputPath, pngCodec, encoderParams);
}
}
接收一个原始图片的路径、输出路径和图片质量。方法首先使用Image.FromFile
方法加载原始图片。之后,创建一个编码参数对象,设置图片的质量。接下来,通过调用GetImageCodecInfo
方法获取原始图片的类型对应的编码器信息。最后,调用image.Save
方法将压缩后的图片保存到指定的输出路径。
/// <summary>
/// 压缩图片并保存到本地
/// </summary>
/// <param name="inputPath">原始图片路径</param>
/// <param name="outputPath">输出路径</param>
/// <param name="quality">图片质量0-100</param>
private void CompressImage(string inputPath, string outputPath, long quality)
{
// 加载原始图片
using (Image image = Image.FromFile(inputPath))
{
// 创建一个编码参数对象
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, quality); // 100表示最高质量(无损)
var pngCodec = GetImageCodecInfo(image.RawFormat);
// 保存压缩后的图片
image.Save(outputPath, pngCodec, encoderParams);
}
}
以下用于获取指定图片类型的编码器信息。方法首先调用ImageCodecInfo.GetImageEncoders()
方法获取所有可用的编码器信息。然后,根据指定的图片类型匹配对应的编码器信息。如果指定的格式在已知的格式中不存在,返回默认的MIME
类型。
/// <summary>
/// 设置图片扩展类型
/// </summary>
/// <param name="format">图片</param>
/// <returns></returns>
public ImageCodecInfo GetImageCodecInfo(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
// 声明编码器
ImageCodecInfo pngCodec;
if (format.Equals(ImageFormat.Jpeg))
pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "image/jpeg");
else if (format.Equals(ImageFormat.Png))
pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "image/png");
else if (format.Equals(ImageFormat.Gif))
pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "image/gif");
else if (format.Equals(ImageFormat.Bmp))
pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "image/bmp");
else if (format.Equals(ImageFormat.Tiff))
pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "image/tiff");
else if (format.Equals(ImageFormat.Icon))
pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "image/x-icon");
else
// 如果格式未知,返回默认的 MIME 类型
pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "application/octet-stream");
return pngCodec;
}
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。