ImageMagick 7.1.0-45转换AVIF至PNG失败及AVIF支持版本疑问
看起来你在使用ImageMagick 7.1.0-45把AVIF格式转成PNG时碰到了解码错误,还疑惑是不是这个版本之后才完善AVIF支持对吧?咱们来一步步梳理你的问题:
首先,你执行的转换命令是:
convert macadamiaCracker1.{avif,png}
但得到了两个报错:
convert: Decoder plugin generated an error: Unspecified (7.0)
macadamiaCracker1.avif' @ error/heic.c/IsHEIFSuccess/135. convert: no images definedmacadamiaCracker1.png' @ error/convert.c/ConvertImageCommand/3325.
你已经通过file命令确认了文件确实是标准的AVIF格式:
file macadamiaCracker1.avif
输出结果:
macadamiaCracker1.avif: ISO Media, AVIF Image
再看你的ImageMagick版本信息:
convert --version
输出:
Version: ImageMagick 7.1.0-45 Q16-HDRI x86_64 d80f6a7cd:20220731
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(4.5)
Delegates (built-in): bzlib cairo djvu fontconfig freetype heic jng jp2 jpeg jxl lcms lqr lzma openexr png raw rsvg tiff webp x xml zlib
Compiler: gcc (11.3)
关于AVIF支持的版本问题
ImageMagick其实从7.0.10-23版本就正式添加了AVIF的支持,因为AVIF是基于HEIF标准的,所以依赖heic delegate来处理。你的7.1.0-45版本已经包含了这个 delegate,理论上是支持AVIF转换的,但你碰到的解码错误大概率是这个版本的HEIC集成存在bug,或者依赖的libheif库版本过旧导致的。
后续的ImageMagick版本(比如7.1.0-50及之后)确实修复了不少AVIF相关的解码兼容性问题,所以你疑惑的“是否7.1.0-45之后才完善AVIF支持”是对的——这个版本之后的更新确实优化了AVIF的处理能力。
可能的解决办法
- 更新ImageMagick版本:升级到最新的稳定版,或者至少到7.1.0-50之后的版本,应该能解决这个解码错误
- 验证AVIF文件完整性:可以用
heif-convert(需要安装libheif工具包)试试转换,命令如下:
如果这个命令能成功转换,说明是ImageMagick的版本问题,不是文件本身的问题heif-convert macadamiaCracker1.avif macadamiaCracker1.png - 检查libheif库版本:确保你系统里的libheif库是支持AVIF的较新版本,因为ImageMagick的HEIC delegate完全依赖这个库来处理AVIF文件
备注:内容来源于stack exchange,提问作者Tim




