C# 进行图片压缩的示例代码(对jpg压缩效果最好)

作者:踏平扶桑 时间:2023-05-11 16:34:19 

直接上代码


public static class ImageCompress
 {
   /// <summary>
   /// 图片压缩
   /// </summary>
   /// <param name="imagePath">图片文件路径</param>
   /// <param name="targetFolder">保存文件夹</param>
   /// <param name="quality">压缩质量</param>
   /// <param name="fileSuffix">压缩后的文件名后缀(防止直接覆盖原文件)</param>
   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);

}

来源:https://www.cnblogs.com/wdw984/p/13112621.html

标签:c#,图片,压缩
0
投稿

猜你喜欢

  • Android studio中生成引用.aar和.jar的方法详解

    2023-09-29 07:48:33
  • Java C++ 算法题解leetcode1608特殊数组特征值

    2023-05-21 21:09:01
  • Java执行cmd命令两种实现方法解析

    2022-09-24 02:43:49
  • VC对自定义资源加密解密(AES)的详解

    2023-01-10 00:27:15
  • Java实现蓝桥杯G将军的示例代码

    2022-05-01 08:44:58
  • MyBatis动态SQL特性详解

    2022-10-03 03:21:50
  • Java Socket编程(四) 重复和并发服务器

    2022-06-29 07:07:06
  • Java 数组获取最大和最小值的实例实现

    2021-06-18 15:53:06
  • Compose开发之动画艺术探索及实现示例

    2023-09-13 04:16:16
  • 安卓监听屏幕的横竖翻转实现方法

    2023-04-01 07:37:12
  • Java超详细分析抽象类和接口的使用

    2021-06-09 12:19:05
  • C#开发的人脸左右相似度计算软件源码分析

    2023-08-26 05:18:41
  • Java语言一元运算符实例解析

    2023-01-14 15:31:22
  • IntelliJ IDEA安装目录和设置目录的说明(IntelliJ IDEA快速入门)

    2021-08-16 21:17:08
  • 简单的理解java集合中的HashSet和HashTree几个重写方法

    2022-10-23 15:16:36
  • 解决Android Studio突然不显示logcat日志的问题

    2021-06-09 01:13:13
  • Java实现图片验证码功能

    2021-12-07 12:58:55
  • 从搭建Struts2 开发环境说起

    2023-11-18 08:54:53
  • win10和win7下java开发环境配置教程

    2022-05-01 05:34:22
  • Java实战项目之校园跑腿管理系统的实现

    2023-11-11 10:29:09
  • asp之家 软件编程 m.aspxhome.com