C#实现JPG图像质量调整

项目背景

最近好友有咨询如何在C#下压缩JPG图像的问题。若允许更改JPG图像的质量就可以压缩图像在本地磁盘上的体积。遇到这种需求,很多同学会想到使用OpenCV、Imagick等第三方库。其实不用加入这些第三方库就可以实现需求,这样软件打包后体积更小,迁移也更容易。
在此分享一下如何使用纯C#代码,不依赖第三方库如何实现。

基本效果如下

这是原始图片,大小为163KB
原始图片

这是不更改图像尺寸,仅修改图像质量的图片,大小97KB。直接看上去,肉眼比较难分辨图像质量变化。
更改质量后的图片

基本思路

JPG图像在使用时本身有图像质量这个属性,需要在保存时,对这个属性进行操作,就可以实现图像的压缩。

主要模块——获取JPG图像的属性

本模块主要获取了JPG图像的属性信息,返回的是一个ImageCodecInfo值。
代码如下:

static ImageCodecInfo GetEncoder(ImageFormat format)
{
	ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
	foreach (ImageCodecInfo codec in codecs)
	{
		if (codec.FormatID == format.Guid)
		{
			return codec;
		}
	}
	return null;
}

写入质量参数

获取到图像的EncoderParameter后,就可以对质量这个属性进行操作了。
注意:encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 50L);
中50L是long类型,切勿用错

实现代码如下:

using (Image image = Image.FromFile(@".\test.jpg"))
{
	ImageCodecInfo jpegCodec = GetEncoder(ImageFormat.Jpeg);
	EncoderParameters encoderParams = new EncoderParameters(1);
	encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 50L);
	image.Save("output.jpg", jpegCodec, encoderParams);
	Console.WriteLine("done.");
	Console.ReadLine();
}

不足和改进

JPG在进行压缩时,会降低图像质量,而且有的时候质量下降会被肉眼所辨识出来,这也是这种方法本身的不足。

其实压缩图片的体积,不仅可以使用JPG方式降低图像质量,还可以将图像更改为Webp格式,这样图像质量损失更小,而且体积也能降下来,有兴趣的话可以借助Imagick等第三方库实现转化。

项目下载链接

https://download.csdn.net/download/qq_30270773/89684769

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值