///
/// 图片压缩
///
/// 图片文件路径
/// 保存文件夹
/// 压缩质量
/// 压缩后的文件名后缀(防止直接覆盖原文件)
public static void CompressionImage(string imagePath, string targetFolder, long quality, string fileSuffix = "Demo")
{
if (!System.IO.File.Exists(imagePath))
{
throw new FileNotFoundException();
}
if (!Directory.Exists(targetFolder))
{
Directory.CreateDirectory(targetFolder);
}
var fileInfo = new FileInfo(imagePath);
var fileName = fileInfo.Name.Replace(fileInfo.Extension, "");
var fileFullName = Path.Combine($"{targetFolder}", $"{fileName}_{fileSuffix}{fileInfo.Extension}");
var imageByte = CompressionImage(imagePath, quality);
var ms = new MemoryStream(imageByte);
var image = Image.FromStream(ms);
image.Save(fileFullName);
ms.Close();
ms.Dispose();
image.Dispose();
}
///
/// 设置图片质量
///
///
/// 范围0~100,越大质量越高
///
private static byte[] CompressionImage(string imagePath, long quality)
{
using (var fileStream = new FileStream(imagePath, FileMode.Open))
{
using (var img = Image.FromStream(fileStream))
{
using (var bitmap = new Bitmap(img))
{
ImageCodecInfo codecInfo = GetEncoder(img.RawFormat);
var myEncoder = System.Drawing.Imaging.Encoder.Quality;
var myEncoderParameters = new EncoderParameters(1);
var myEncoderParameter = new EncoderParameter(myEncoder, quality);
myEncoderParameters.Param[0] = myEncoderParameter;
using (var ms = new MemoryStream())
{
bitmap.Save(ms, codecInfo, myEncoderParameters);
myEncoderParameters.Dispose();
myEncoderParameter.Dispose();
return ms.ToArray();
}
}
}
}
}
///
/// Guid
///
///
///
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
var codecs = ImageCodecInfo.GetImageDecoders();
return codecs.FirstOrDefault(codec => codec.FormatID == format.Guid);
}
调用方法:
CompressionImage("C:\\Users\\admin\\Desktop\\画图\\1.jpg", "C:\\Users\\admin\\Desktop\\画图\\Demo", 50, "Demo");