name: imagemagick description: 使用ImageMagick命令行工具执行高级图像处理任务的指南,包括格式转换、大小调整、裁剪、效果、变换和批处理操作。通过shell命令以程序化方式操作图像时使用。 license: MIT version: 1.0.0
ImageMagick技能
ImageMagick是一个全面、免费、开源的软件套件,用于在超过250种格式中创建、编辑、转换和操作图像。本技能涵盖了ImageMagick工具的命令行使用,用于程序化图像处理。
何时使用此技能
在以下情况下使用此技能:
- 在格式之间转换图像(PNG、JPEG、WebP、GIF等)
- 调整大小、裁剪或变换图像
- 对图像应用效果、滤镜或调整
- 创建缩略图或图像预览
- 批处理多个图像
- 合成或组合图像
- 向图像添加水印、边框或文本
- 为web或打印优化图像
核心概念
主要命令
ImageMagick提供多个命令行工具:
- magick:现代统一命令,适用于所有操作(ImageMagick v7+)
- convert:旧版命令,用于图像转换和操作(仍广泛使用)
- mogrify:原地修改图像(批处理)
- identify:显示图像元数据和属性
- montage:创建图像合成和联系表
- composite:叠加图像
注意:在ImageMagick v7+中,推荐使用magick命令。旧版convert语法:convert input.png output.jpg变为magick input.png output.jpg
命令结构
基本语法:
magick [输入选项] 输入文件 [操作] [输出选项] 输出文件
操作按指定顺序从左到右应用。
几何规格
ImageMagick使用几何字符串指定尺寸:
100x100- 调整为适合100×100(保持宽高比)100x100!- 强制精确尺寸(忽略宽高比)100x100^- 填充100×100(可能裁剪,保持宽高比)100x- 调整宽度为100(自动高度)x100- 调整高度为100(自动宽度)50%- 缩放为原始的50%100x100+10+20- 偏移(10, 20)处的100×100区域
安装
macOS:
brew install imagemagick
Ubuntu/Debian:
sudo apt-get install imagemagick
验证安装:
magick -version
# 或
convert -version
常见操作
格式转换
在图像格式之间转换:
# PNG转换为JPEG
magick input.png output.jpg
# JPEG转换为WebP
magick input.jpg output.webp
# 多种格式
magick input.png output.jpg output.webp output.gif
# 设置JPEG质量(0-100)
magick input.png -quality 85 output.jpg
# 带压缩转换
magick input.png -quality 90 -strip output.jpg
调整大小
调整图像大小,同时保持宽高比:
# 调整为适合800×600
magick input.jpg -resize 800x600 output.jpg
# 调整到特定宽度(自动高度)
magick input.jpg -resize 800x output.jpg
# 调整到特定高度(自动宽度)
magick input.jpg -resize x600 output.jpg
# 调整到精确尺寸(忽略宽高比)
magick input.jpg -resize 800x600! output.jpg
# 按百分比缩放
magick input.jpg -resize 50% output.jpg
# 仅当较大时调整大小(仅缩小)
magick input.jpg -resize 800x600\> output.jpg
# 仅当较小时调整大小(仅放大)
magick input.jpg -resize 800x600\< output.jpg
裁剪
提取图像部分:
# 从(100, 100)开始裁剪400×400像素
magick input.jpg -crop 400x400+100+100 output.jpg
# 从中心裁剪
magick input.jpg -gravity center -crop 400x400+0+0 output.jpg
# 裁剪后移除虚拟画布
magick input.jpg -crop 400x400+100+100 +repage output.jpg
# 从中心裁剪到宽高比
magick input.jpg -gravity center -crop 16:9 output.jpg
调整大小+裁剪(缩略图生成)
创建方形缩略图的常见模式:
# 调整为填充100×100,然后从中心裁剪
magick input.jpg -resize 100x100^ -gravity center -extent 100x100 output.jpg
# 使用裁剪的替代方法
magick input.jpg -resize 275x275^ -gravity center -crop 275x275+0+0 +repage output.jpg
# 创建带特定背景的缩略图
magick input.jpg -resize 100x100 -background white -gravity center -extent 100x100 output.jpg
效果和滤镜
应用视觉效果:
# 模糊
magick input.jpg -blur 0x8 output.jpg
# 高斯模糊,半径5,标准差3
magick input.jpg -gaussian-blur 5x3 output.jpg
# 锐化
magick input.jpg -sharpen 0x1 output.jpg
# 灰度
magick input.jpg -colorspace Gray output.jpg
# 棕褐色调
magick input.jpg -sepia-tone 80% output.jpg
# 负片(反转颜色)
magick input.jpg -negate output.jpg
# 边缘检测
magick input.jpg -edge 3 output.jpg
# 浮雕
magick input.jpg -emboss 2 output.jpg
# 油画效果
magick input.jpg -paint 4 output.jpg
# 炭笔画效果
magick input.jpg -charcoal 2 output.jpg
调整
修改亮度、对比度和颜色:
# 调整亮度(+/- 0-100)
magick input.jpg -brightness-contrast 10x0 output.jpg
# 调整对比度
magick input.jpg -brightness-contrast 0x20 output.jpg
# 同时调整亮度和对比度
magick input.jpg -brightness-contrast 10x20 output.jpg
# 调整饱和度
magick input.jpg -modulate 100,150,100 output.jpg
# 调整色调
magick input.jpg -modulate 100,100,120 output.jpg
# 自动级别(归一化对比度)
magick input.jpg -auto-level output.jpg
# 自动伽马校正
magick input.jpg -auto-gamma output.jpg
# 归一化(拉伸直方图)
magick input.jpg -normalize output.jpg
旋转和翻转
变换图像方向:
# 顺时针旋转90度
magick input.jpg -rotate 90 output.jpg
# 旋转180度
magick input.jpg -rotate 180 output.jpg
# 逆时针旋转
magick input.jpg -rotate -90 output.jpg
# 带背景颜色旋转
magick input.jpg -background white -rotate 45 output.jpg
# 垂直翻转
magick input.jpg -flip output.jpg
# 水平翻转(镜像)
magick input.jpg -flop output.jpg
# 基于EXIF自动定向
magick input.jpg -auto-orient output.jpg
边框和框架
向图像添加边框:
# 添加10px黑色边框
magick input.jpg -border 10x10 output.jpg
# 添加带特定颜色的边框
magick input.jpg -bordercolor red -border 10x10 output.jpg
# 添加框架效果
magick input.jpg -mattecolor gray -frame 10x10+5+5 output.jpg
# 添加阴影效果
magick input.jpg \( +clone -background black -shadow 80x3+5+5 \) \
+swap -background white -layers merge +repage output.jpg
文本和水印
添加文本叠加:
# 添加简单文本
magick input.jpg -pointsize 30 -fill white -annotate +10+30 "Hello" output.jpg
# 添加带定位的文本
magick input.jpg -gravity south -pointsize 20 -fill white \
-annotate +0+10 "Copyright 2025" output.jpg
# 添加带背景的文本
magick input.jpg -gravity center -pointsize 40 -fill white \
-undercolor black -annotate +0+0 "Watermark" output.jpg
# 添加半透明水印
magick input.jpg \( -background none -fill "rgba(255,255,255,0.5)" \
-pointsize 50 label:"DRAFT" \) -gravity center -compose over -composite output.jpg
合成
组合多个图像:
# 在图像上叠加水印
magick input.jpg watermark.png -gravity southeast -composite output.jpg
# 带透明度叠加
magick input.jpg watermark.png -gravity center \
-compose over -composite output.jpg
# 平铺模式
magick input.jpg pattern.png -compose over -tile -composite output.jpg
# 并排图像
magick input1.jpg input2.jpg +append output.jpg
# 垂直堆叠图像
magick input1.jpg input2.jpg -append output.jpg
格式特定选项
为不同格式优化:
# JPEG带质量和移除元数据
magick input.png -quality 85 -strip output.jpg
# 渐进式JPEG
magick input.png -quality 85 -interlace Plane output.jpg
# PNG带压缩级别(0-9)
magick input.jpg -quality 95 output.png
# WebP带质量
magick input.jpg -quality 80 output.webp
# WebP无损
magick input.png -define webp:lossless=true output.webp
# GIF带优化
magick input.png -colors 256 output.gif
# 透明背景PNG
magick input.jpg -transparent white output.png
批处理
使用mogrify
原地修改多个文件:
# 在当前目录中转换所有JPEG为PNG
mogrify -format png *.jpg
# 调整目录中所有图像大小
mogrify -resize 800x600 *.jpg
# 应用到输出目录(保留原始文件)
mogrify -path ./output -resize 800x600 *.jpg
# 批量缩略图生成
mogrify -path ./thumbnails -resize 275x275^ -gravity center \
-crop 275x275+0+0 +repage *.jpg
# 批量格式转换带质量
mogrify -path ./optimized -format jpg -quality 85 -strip *.png
使用shell循环
用于更复杂的批处理操作:
# 自定义命名转换
for img in *.jpg; do
magick "$img" -resize 800x600 "resized_$img"
done
# 多步处理
for img in *.jpg; do
magick "$img" -resize 1920x1080^ -gravity center \
-crop 1920x1080+0+0 +repage -quality 85 "processed_$img"
done
# 不同输出格式
for img in *.png; do
magick "$img" -quality 90 "${img%.png}.jpg"
done
图像信息
使用identify
获取图像元数据:
# 基本信息
identify image.jpg
# 详细信息
identify -verbose image.jpg
# 仅格式
identify -format "%f: %wx%h %b
" image.jpg
# 特定属性
identify -format "%f: %wx%h, %[colorspace], %[type]
" image.jpg
# 文件大小
identify -format "%f: %b
" image.jpg
# 多个图像
identify *.jpg
常见格式字符串
%f- 文件名%w- 宽度%h- 高度%b- 文件大小%[colorspace]- 颜色空间%[type]- 图像类型%[channels]- 通道数%[depth]- 位深度
高级技术
创建联系表
使用montage:
# 基本网格
montage *.jpg -geometry 200x200+2+2 contact-sheet.jpg
# 带标签
montage *.jpg -geometry 200x200+2+2 -label '%f' contact-sheet.jpg
# 自定义布局(3列)
montage *.jpg -tile 3x -geometry 200x200+5+5 contact-sheet.jpg
动画GIF
创建动画:
# 从图像创建GIF
magick -delay 100 -loop 0 frame*.png animated.gif
# 优化GIF
magick animated.gif -fuzz 5% -layers Optimize optimized.gif
# 从GIF提取帧
magick animated.gif frame_%03d.png
复杂管道
链接多个操作:
# 调整大小、裁剪、添加边框、调整亮度
magick input.jpg \
-resize 1000x1000^ \
-gravity center \
-crop 1000x1000+0+0 +repage \
-bordercolor black -border 5x5 \
-brightness-contrast 5x10 \
-quality 90 \
output.jpg
# 创建带水印的缩略图
magick input.jpg \
-resize 400x400^ \
-gravity center \
-extent 400x400 \
\( watermark.png -resize 100x100 \) \
-gravity southeast -geometry +10+10 \
-composite \
output.jpg
性能优化
内存和速度
# 限制内存使用(适用于大图像)
magick -limit memory 2GB -limit map 4GB input.jpg -resize 50% output.jpg
# 设置线程数
magick -limit thread 4 input.jpg -resize 50% output.jpg
# 对大文件使用流式处理
magick -define stream:buffer-size=0 huge.jpg -resize 50% output.jpg
质量与大小权衡
# 高质量(较大文件)
magick input.jpg -quality 95 output.jpg
# 平衡(推荐用于web)
magick input.jpg -quality 85 -strip output.jpg
# 较低质量(较小文件)
magick input.jpg -quality 70 -sampling-factor 4:2:0 -strip output.jpg
# 渐进式JPEG(对web更好)
magick input.jpg -quality 85 -interlace Plane -strip output.jpg
常见模式
头像/个人资料图片生成
# 从任何宽高比创建方形缩略图
magick input.jpg -resize 200x200^ -gravity center -extent 200x200 avatar.jpg
# 圆形头像(带透明度的PNG)
magick input.jpg -resize 200x200^ -gravity center -extent 200x200 \
\( +clone -threshold -1 -negate -fill white -draw "circle 100,100 100,0" \) \
-alpha off -compose copy_opacity -composite avatar.png
响应式图像
# 生成多个尺寸
for size in 320 640 1024 1920; do
magick input.jpg -resize ${size}x -quality 85 "output-${size}w.jpg"
done
水印
# 右下角水印
magick input.jpg watermark.png -gravity southeast \
-geometry +10+10 -composite output.jpg
# 平铺水印
magick input.jpg \( watermark.png -alpha set -channel A \
-evaluate multiply 0.3 +channel \) -tile -composite output.jpg
错误处理
常见问题及解决方案:
文件未找到:
# 检查文件是否存在
[ -f input.jpg ] && magick input.jpg output.png || echo "File not found"
无效几何:
# 先验证尺寸
identify -format "%wx%h" input.jpg
内存错误:
# 限制资源
magick -limit memory 1GB -limit map 2GB input.jpg output.png
最佳实践
- 始终使用
-strip以移除元数据(减小文件大小) - 设置适当的质量(85对于JPEG是好平衡)
- 使用
+repage在裁剪后重置虚拟画布 - 引号文件路径 带空格:
"my image.jpg" - 在样本上测试 在批处理之前
- 备份原始文件 当使用mogrify时
- 使用
-auto-orient以尊重EXIF方向 - 渐进式JPEG 用于web(使用
-interlace Plane) - 限制内存 对于大批次以防止崩溃
- 检查输出 在复杂操作后
故障排除
策略限制
一些系统为安全原因限制ImageMagick操作:
# 检查策略
identify -list policy
# 编辑策略文件(如果需要)
sudo nano /etc/ImageMagick-6/policy.xml
# 或
sudo nano /etc/ImageMagick-7/policy.xml
常见错误
“convert: not authorized”
- ImageMagick安全策略阻止操作
- 编辑policy.xml以允许特定格式/操作
“convert: no decode delegate”
- 缺少格式支持库
- 安装附加库(libjpeg、libpng、libwebp等)
“convert: memory allocation failed”
- 图像太大或内存不足
- 使用
-limit标志或分块处理
资源
- 官方文档:https://imagemagick.org/
- 命令行选项:https://imagemagick.org/script/command-line-options.php
- 示例:https://imagemagick.org/Usage/
- 格式支持:https://imagemagick.org/script/formats.php
命令参考快速指南
格式转换:
magick input.ext output.ext
调整大小:
magick input.jpg -resize WIDTHxHEIGHT output.jpg
裁剪:
magick input.jpg -crop WIDTHxHEIGHT+X+Y output.jpg
缩略图:
magick input.jpg -resize 100x100^ -gravity center -extent 100x100 thumb.jpg
效果:
magick input.jpg -blur 0x8 output.jpg
批处理:
mogrify -resize 800x600 *.jpg
信息:
identify -verbose image.jpg