所以我使用.NET 7
,因为System.Drawing.Imaging
可以(或似乎是)使用以下代码将文件保存为webp
文件:
pictureBox1.Image = image; //image is a Bitmap
image.Save(folderpath, ImageFormat.Webp);
非常向前,但保存的图像占用716kb
,但其大小为640
x 480
如何减小文件大小?
我找到了很多关于减少图像大小的答案,但不是我的情况,已经减少了,我想知道为什么一个webp文件会这么大,因为质量也很差(网络摄像头图像)。
使用PNG
会占用磁盘上相同的空间。
更新:
因此,我可以使用MSDN中的以下代码来降低PNG
的“质量”:
if (capture.IsOpened())
{
capture.Read(frame);
image = BitmapConverter.ToBitmap(frame);
if (pictureBox1.Image != null)
{
pictureBox1.Image.Dispose();
}
pictureBox1.Image = image;
ImageCodecInfo myImageCodecInfo;
System.Drawing.Imaging.Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
myImageCodecInfo = GetEncoder("image/webp");
myEncoderParameters = new EncoderParameters(1);
myEncoder = System.Drawing.Imaging.Encoder.Quality;
// Save the bitmap as a JPEG file with quality level 25.
myEncoderParameter = new EncoderParameter(myEncoder, 25L);
myEncoderParameters.Param[0] = myEncoderParameter;
// and now save it to the file
image.Save(filename, myImageCodecInfo, myEncoderParameters);
}
使用这种方法:
public static ImageCodecInfo GetEncoder(string mimetype)
{
return ImageCodecInfo.GetImageEncoders().FirstOrDefault(e => e.MimeType == mimetype);
}
但是我不明白为什么如果Save()
允许我保存为webp
文件,在ImageCodecInfo.GetImageEncoders()
中没有编码器来mimetype webp
1条答案
按热度按时间fdbelqdn1#
它占用与PNG相同的空间的原因很简单:在保存()函数的源代码中,您可以看到,如果它找不到所请求格式的编码器,它会默认为PNG。
我相信尽管库中有ImageFormat.Webp常量,但Windows并不提供WebP编码器。documentation for GDI+没有列出WebP,当我在Windows 10系统上列出编码器时,它也与该列表匹配。因此,如果你想保存到WebP,你需要使用第三方库。
例如,您可以像这样使用
SkiaSharp.Views.Desktop.Common
包: