在 .NET C# 中读取 .AVIF 图片文件可能会出现错误,因为默认情况下,.NET Framework 或 .NET Core 的内置库(如 System.Drawing)并不支持 AVIF 格式。
以下是解决此问题的一些方法:
方法 1:使用第三方库
ImageSharp
ImageSharp 是一个现代的 .NET 图像处理库,支持多种图像格式,包括 AVIF。
安装 NuGet 包
dotnet add package SixLabors.ImageSharp
代码示例
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
class Program
{
static void Main(string[] args)
{
string avifPath = "path/to/your/image.avif";
string outputPath = "path/to/your/output.png";
try
{
// 加载AVIF文件
using (var image = Image.Load(avifPath))
{
// 可以对图片进行操作,例如调整大小
image.Mutate(x => x.Resize(800, 600));
// 保存为其他格式
image.Save(outputPath); // 保存为PNG
}
Console.WriteLine("图片处理成功!");
}
catch (Exception ex)
{
Console.WriteLine($"图片读取失败: {ex.Message}");
}
}
}
Magick.NET
Magick.NET 是基于 ImageMagick 的 .NET 图像处理库,也支持 AVIF 格式。
安装 NuGet 包
dotnet add package Magick.NET-Q16-AnyCPU
代码示例
using ImageMagick;
class Program
{
static void Main(string[] args)
{
string avifPath = "path/to/your/image.avif";
string outputPath = "path/to/your/output.jpg";
try
{
// 加载 AVIF 文件
using (var image = new MagickImage(avifPath))
{
// 保存为其他格式
image.Write(outputPath);
}
Console.WriteLine("图片处理成功!");
}
catch (Exception ex)
{
Console.WriteLine($"图片读取失败: {ex.Message}");
}
}
}
方法 2:安装系统级解码支持
在 Windows 上,你可以安装支持 AVIF 格式的扩展,如:
AV1 Video Extension:微软提供的扩展,用于支持 AVIF 解码。微软商店下载
安装后,Windows 系统将能够解码 AVIF 格式,部分支持 Windows Imaging Component (WIC) 的库(如 System.Drawing.Common)可能会正常读取。
方法 3:确保使用支持 AVIF 的图像库版本
如果你使用 System.Drawing.Common 或其他内置图像库,但仍然需要处理 AVIF 图像,确保你的库版本和运行环境支持它。例如:
Windows 10/11 和 .NET 6+ 是处理现代格式的最低要求之一。
尝试用更现代的第三方图像库代替旧的 System.Drawing。
注意事项
System.Drawing 限制:从 .NET 6 开始,System.Drawing.Common 在非 Windows 系统上不推荐使用,因此对于跨平台开发,推荐使用 ImageSharp 或 Magick.NET。
性能与依赖性:对于高性能需求,可以选择针对特定用途优化的库。
调试信息:如果报错信息中提到“格式不支持”,优先检查解码器是否已安装或库是否支持。