Skip to content
MagickCmd报错 › no encode delegate for this image…

no encode delegate for this image format(AVIF、HEIC、WebP)

格式支持是编译进 ImageMagick 的,不是靠参数打开。如何查看你的版本支持什么,以及怎么换一个带对应格式的版本。

convert: no encode delegate for this image format 'WEBP' @ error/constitute.c/WriteImage/1265
convert: no decode delegate for this image format 'HEIC' @ error/constitute.c/ReadImage/575

这是什么意思

ImageMagick 自己并不实现大部分编解码器。它是在编译时链接外部库 —— libwebplibheiflibjxllibraw。如果你的二进制文件编译时没带上某个库,任何命令行参数都补不上。支持要么在里面,要么不在。

先看你有什么

magick -list format | grep -iE 'webp|heic|avif|jxl'
  WEBP* WEBP      rw-   WebP Image Format (libwebp 1.3.2)
  HEIC  HEIC      r--   High Efficiency Image Format

那三个字符分别是读、写、多图支持。上面这个例子里 WebP 能读能写,HEIC 只能读。列表里完全没有的格式就是完全不支持。

另外两个有用的命令:

magick -version          # DELEGATES 那行列出了编译进去的库
magick -list delegate     # 它能调用的外部程序

换一个带这个格式的版本

macOS

brew install imagemagick

Homebrew 的版本包含 WebP、HEIC 和 AVIF。装得早的话跑一下 brew upgrade imagemagick

Debian / Ubuntu

官方源的 imagemagick 包常常没有 HEIC,有时也没有 AVIF。装上额外的委托库:

apt install imagemagick libmagickcore-6.q16-6-extra
apt install libheif1 libheif-plugin-libde265     # HEIC/AVIF 解码

还不够的话,官网的 AppImage 是一个功能齐全的 IM7 版本,不用编译:

wget https://imagemagick.org/archive/binaries/magick
chmod +x magick
./magick -list format | grep -i heic

Alpine

apk add imagemagick imagemagick-heic imagemagick-webp imagemagick-jpeg

Alpine 把每个委托库拆成了独立的包,所以只装 imagemagick 几乎什么格式都不支持。这坑了很多做小体积 Docker 镜像的人。

各格式的说明

  • HEIC —— 需要 libheif。读 iPhone 照片还需要一个 HEVC 解码器(比如 libde265),有些发行版出于专利原因不带 —— 这就是为什么装了 libheif 之后 HEIC 依然显示不支持。
  • AVIF —— 需要带 libaom 或同类 AV1 编码器的 libheif。编码很慢,大照片要好几秒。
  • JPEG XL —— 需要 libjxl 和较新的 ImageMagick,各发行版支持还很不一致。
  • RAW(CR2、NEF、ARW) —— 委托给 dcrawlibraw,需要单独安装。

换不了版本时的绕法

# WebP 用官方编码器
cwebp -q 80 input.png -o output.webp
dwebp input.webp -o output.png

# HEIC 用 libheif 自带的工具
heif-convert input.heic output.jpg

# AVIF 用 libavif
avifenc --min 20 --max 30 input.png output.avif

用专门的工具转格式,其他处理再交给 ImageMagick。在流水线里这样往往还更快。


相关页面

Copied