如何将AVIF编解码器设为含SkiaSharp的ASP.NET项目依赖?
SkiaSharp AVIF编码返回null,ASP.NET 8内嵌编解码器部署方案
问题根源
SkiaSharp在Windows平台下的AVIF编码默认依赖系统级AV1编解码器,Windows 10未预装该组件,导致image.Encode(SKEncodedImageFormat.Avif, quality)调用失败返回null。Chrome浏览器自带独立AVIF编解码器,因此能正常渲染AVIF文件,但不影响SkiaSharp的编码逻辑。
解决步骤
1. 替换SkiaSharp依赖包,使用内置编解码器
移除原有SkiaSharp包,安装包含静态链接AVIF编解码器的NuGet包组合:
- 安装
SkiaSharp(版本≥2.88.0,需包含AVIF枚举值的更新) - 安装
SkiaSharp.NativeAssets.Win32(提供Windows平台的静态编译原生库,包含AVIF编解码器)
2. 配置项目确保发布时携带原生资产
在ASP.NET 8项目的.csproj文件中添加以下配置,保证发布过程中原生编解码器文件被同步部署:
<PropertyGroup> <!-- 若启用代码裁剪,需关闭或添加保留规则;默认关闭即可 --> <PublishTrimmed>false</PublishTrimmed> <!-- 强制将原生资产复制到输出目录 --> <NativeAssetPublishMode>CopyAlways</NativeAssetPublishMode> </PropertyGroup>
如果必须启用代码裁剪,需在项目根目录添加runtimeconfig.template.json并配置保留规则:
{ "runtimeOptions": { "additionalProbingPaths": [ "native" ] } }
3. 验证编码逻辑
你的原有代码无需修改,更换依赖包后,image.Encode(SKEncodedImageFormat.Avif, quality)会正常返回SKData,可直接写入文件流完成AVIF格式导出。
内容的提问来源于stack exchange,提问作者RonC
相关产品推荐
相关产品推荐

