ImageMagick技能Skill imagemagick

ImageMagick技能是一种通过命令行工具执行高级图像处理的技能,包括图像格式转换、大小调整、裁剪、特效应用、变换操作和批处理。适用于程序化图像处理、web图像优化、自动化脚本开发等场景,关键词:ImageMagick、图像处理、命令行工具、格式转换、批量操作、SEO优化。

DevOps 0 次安装 0 次浏览 更新于 3/18/2026

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

最佳实践

  1. 始终使用-strip 以移除元数据(减小文件大小)
  2. 设置适当的质量(85对于JPEG是好平衡)
  3. 使用+repage 在裁剪后重置虚拟画布
  4. 引号文件路径 带空格:"my image.jpg"
  5. 在样本上测试 在批处理之前
  6. 备份原始文件 当使用mogrify时
  7. 使用-auto-orient 以尊重EXIF方向
  8. 渐进式JPEG 用于web(使用-interlace Plane
  9. 限制内存 对于大批次以防止崩溃
  10. 检查输出 在复杂操作后

故障排除

策略限制

一些系统为安全原因限制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标志或分块处理

资源

命令参考快速指南

格式转换:

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