直接上代码
public static class ImageCompress
{
///
/// 图片压缩
///
/// 图片文件路径
/// 保存文件夹
/// 压缩质量
/// 压缩后的文件名后缀(防止直接覆盖原文件)
public static void CompressionImage(string imagePath, string targetFolder, long quality = 100, string fileSuffix = "compress")
{
if (!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();
}
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))
{
var codecInfo = GetEncoder(img.RawFormat);
var myEncoder = 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();
}
}
}
}
}
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
var codecs = ImageCodecInfo.GetImageDecoders();
return codecs.FirstOrDefault(codec => codec.FormatID == format.Guid);
}
}
调用方法(WPF为例)
private void Button_Click(object sender, RoutedEventArgs e)
{
var fileDialog = new OpenFileDialog();
var fileSelect = "";
if (fileDialog.ShowDialog(this)==true)
{
fileSelect = fileDialog.FileName;
}
if(string.IsNullOrWhiteSpace(fileSelect)) return;
ImageCompress.CompressionImage(fileSelect,@"d:",50);
}
以上就是C# 进行图片压缩的示例代码(对jpg压缩效果最好)的详细内容,更多关于c# 图片压缩的资料请关注考高分网其它相关文章!



