Skip to content
MagickCmd › ImageMagick 格式转换与压缩

ImageMagick 格式转换与压缩

用 ImageMagick 转换图片格式并正确压缩。JPEG、PNG、WebP、AVIF 各自该加什么参数,以及透明 PNG 转 JPEG 变黑的解决办法。

ImageMagick 是根据文件扩展名决定用哪个编码器的,不是靠参数。把输出命名为 photo.webp 才是真正选中 WebP。其余的参数都是在告诉这个编码器该下多大力气。

为网页优化 JPEG

magick input.jpg -strip -interlace Plane -sampling-factor 4:2:0 -quality 82 output.jpg
  • -strip 删除 EXIF、注释和色彩描述文件。
  • -interlace Plane 改成渐进式,加载时先模糊后清晰,而不是从上往下一行行出来。
  • -sampling-factor 4:2:0 把色度分辨率减半。照片上完全看不出,但会让彩色细字和细红线发糊 —— 处理截图和 UI 稿时请关掉
  • -quality 82 是常见的甜点值。低于 75 左右,皮肤和天空上的瑕疵就开始可见了。

透明 PNG 转 JPEG 而不变黑

ImageMagick 最常被吐槽的一个坑。JPEG 没有透明通道,透明像素被丢弃后,底下存的 RGB 值就露出来了 —— 通常是黑色。

magick input.png -background white -alpha remove -alpha off output.jpg

-alpha remove 先把图合成到背景色上,-alpha off 再丢掉已经多余的通道让文件更小。-background 必须写在这两者前面,因为它是设置类参数而不是操作类。

转成 WebP

magick input.jpg -quality 80 -define webp:method=6 output.webp

method=6 是最慢、体积最小的档位。在照片上,WebP q80 的体积大约相当于 JPEG q65,但观感相当。纯色图形建议用无损:

magick input.png -define webp:lossless=true output.webp

压小 PNG

magick input.png -strip -define png:compression-level=9 output.png

这是无损的。对 logo、截图、插画想要更大幅度的压缩,可以量化到调色板:

magick input.png -strip -colors 256 -define png:compression-level=9 output.png

先确认你的版本支持这个格式

格式支持是编译进去的,不是靠参数打开的。调试 AVIF 或 HEIC 命令之前,先看你的程序能不能写:

magick -list format | grep -iE 'avif|heic|webp'

每行末尾是读/写/多图三个权限位。如果显示 r--,说明只能读不能写,加任何参数都改变不了 —— 需要换一个带对应库的版本。

关于 -strip 的一个警告

-strip 同时会删掉 ICC 色彩描述文件。对广色域相机或 Display-P3 屏幕手机拍的图,不先转换像素就丢掉描述文件,颜色会明显变化 —— 通常是发闷发灰。安全的顺序是:

magick input.jpg -colorspace sRGB -strip -quality 85 output.jpg

相关页面

Copied