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