1. 程式人生 > 程式設計 >C# 進行圖片壓縮的示例程式碼(對jpg壓縮效果最好)

C# 進行圖片壓縮的示例程式碼(對jpg壓縮效果最好)

直接上程式碼

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);

    }

以上就是C# 進行圖片壓縮的示例程式碼(對jpg壓縮效果最好)的詳細內容,更多關於c# 圖片壓縮的資料請關注我們其它相關文章!