convert是linux下基于imagemagick的命令行图像处理工具,支持格式转换、缩放、旋转、加水印、批量处理等,需先安装imagemagick,适用于脚本化与服务器环境。

convert 是 Linux 下最直接、最可控的批量图片格式转换工具,前提是已安装 ImageMagick(通常自带或可通过 sudo apt install imagemagick 安装)。它不依赖 GUI,适合脚本化、服务器环境和重复任务——只要命令写对,一次搞定几百张图。
用 for 循环 + convert 最稳妥
这是新手最易理解、调试最方便的方式,不会误删原图,路径和扩展名控制清晰。
-
for循环天然支持通配符,比如*.png,且能逐个处理文件名含空格的情况(只要用双引号包裹变量) - 推荐写法:
for f in *.png; do convert "$f" "${f%.png}.jpg"; done -
${f%.png}是 Bash 参数展开,安全去掉后缀;.jpg是硬编码目标格式,不依赖文件内容 - 如果原图名含空格,不加引号会导致命令拆分失败;如果目录下没有
.png文件,for会把字面量*.png当作文件名传给convert,报错unable to open image '*.png'—— 建议先ls *.png确认匹配结果
mogrify 能覆盖原图但风险高
mogrify 和 convert 同属 ImageMagick,但它默认就地修改源文件——不是生成新文件,而是直接覆写。这省磁盘空间,但没备份就等于“手抖即丢图”。
- 正确用法(带输出目录避免覆盖):
mogrify -format jpg -path ./jpg_output/ *.png
其中-path指定输出位置,-format指定目标格式 - 绝对不要写
mogrify -format jpg *.png—— 这会把所有.png文件直接变成.jpg后缀的同名文件,但内容仍是 PNG 编码,导致文件损坏且不可逆 -
mogrify不支持重命名逻辑(如自动替换后缀),想保留原名只能靠-path配合目录隔离
用 find + xargs 处理深层目录
当图片散落在子目录中(如 ./photos/2023/01/*.png),for 循环默认只扫当前层,这时 find 更可靠。
- 安全写法(每文件单独执行,防空格):
find . -name "*.png" -print0 | xargs -0 -I{} convert "{}" "{%.png}.jpg"注意:-print0和-0配合才能真正处理含空格/换行的路径 - 别用
ls | xargs:它在文件名含空格时必然断裂,且ls输出顺序不可靠,可能漏文件 -
find默认递归,若只需一级子目录,加-maxdepth 1
WebP 或 PDF 等非主流格式要确认 delegate 支持
convert 能转什么格式,取决于编译时启用的 delegate(解码器)。比如 WebP 支持不是默认开启的,convert input.png output.webp 报错 no encode delegate for this image format 就是这个原因。
- 查当前支持的格式:
convert -list format | grep -i webp(有WEBP*行表示可用) - Debian/Ubuntu 上补全 WebP:
sudo apt install libwebp-dev,再重装 ImageMagick(或升级到较新版本,如 7+) - 转 PDF 本质是把图嵌入 PDF 容器,
convert img.jpg out.pdf可行,但多图合成单 PDF 要用convert *.jpg combined.pdf,注意内存占用随图数量线性增长
convert 会静默丢弃 alpha 通道(变白底),不加 -background white -alpha remove 就可能出黑边;又比如某些相机 JPG 带 ICC profile,转 PNG 后可能色偏。这些不是“转不转得动”的问题,而是“转出来对不对”的问题——批量操作前,务必用一张图跑通完整参数再放大。











