c# - JPEG图像的C#质量较低
问题描述
我正在尝试在 .net core 3 中制作一个控制台应用程序,该应用程序可以成功地从计算机获取位图并将其发送到另一台计算机。但现在我想降低图像质量并将其作为 JPEG 文件发送。
我在互联网上看过,但我无法让它工作。我最近尝试使用以下MSDN网站。但是使用这种方法,ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
由于我的应用程序找不到GetEncoder
. 我GetEncoder
在System.Text.Encoding.Getencoding
但这里getEncoder
没有找到任何参数。
所以我的问题是我必须使用哪个命名空间,还是有其他方法可以降低 JPEG 图像的质量?
解决方案
这是我将图像压缩为 jpeg 的功能
public static System.Drawing.Imaging.ImageCodecInfo GetEncoder(System.Drawing.Imaging.ImageFormat format)
{
System.Drawing.Imaging.ImageCodecInfo[] codecs = System.Drawing.Imaging.ImageCodecInfo.GetImageDecoders();
foreach (System.Drawing.Imaging.ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
public static byte[] GetCompressedImage(System.Drawing.Image img, long quality)
{
System.Drawing.Imaging.ImageCodecInfo ici = GetEncoder(System.Drawing.Imaging.ImageFormat.Jpeg);
System.Drawing.Imaging.EncoderParameters eps = new System.Drawing.Imaging.EncoderParameters(2);
eps.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
eps.Param[1] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)System.Drawing.Imaging.EncoderValue.CompressionLZW);
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, ici, eps);
return ms.ToArray();
}
}
推荐阅读
- unity3d - Unity URP 看起来很奇怪的光照贴图问题
- javascript - 离子变量损失
- java - 我在 Java 中使用什么将等同于 Javascript 中的 Async Await?
- c++ - 如何将 Code::Blocks 语言更改为英语
- web-scraping - 如何找出表中的原始数据在哪里?
- unity3d - Luasocket收到大量数据包后意外关闭
- paypal - 将附加参数传递给贝宝按钮 url
- javascript - 为什么箭头函数作为 JavaScript 对象属性没有得到 this 的引用?
- java - 如何更改对象字段的呈现方式,同时仍保留所述字段的原始值?
- dart-pdf - pdfImageFromImageProvider 新实现