惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 热门话题
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
Microsoft Security Blog
Microsoft Security Blog
月光博客
月光博客
Jina AI
Jina AI
博客园_首页
Google DeepMind News
Google DeepMind News
T
Tailwind CSS Blog
博客园 - 司徒正美
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
Recorded Future
Recorded Future
大猫的无限游戏
大猫的无限游戏
G
Google Developers Blog
D
Docker
罗磊的独立博客
美团技术团队
爱范儿
爱范儿
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
云风的 BLOG
云风的 BLOG
宝玉的分享
宝玉的分享
J
Java Code Geeks
U
Unit 42
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
SecWiki News
SecWiki News
T
Troy Hunt's Blog
H
Heimdal Security Blog
The Cloudflare Blog
Webroot Blog
Webroot Blog
aimingoo的专栏
aimingoo的专栏
Security Archives - TechRepublic
Security Archives - TechRepublic
F
Full Disclosure
AI
AI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Last Week in AI
Last Week in AI
T
The Exploit Database - CXSecurity.com
V
V2EX
Spread Privacy
Spread Privacy
M
MIT News - Artificial intelligence
量子位
Y
Y Combinator Blog
阮一峰的网络日志
阮一峰的网络日志
NISL@THU
NISL@THU
Hacker News: Ask HN
Hacker News: Ask HN
The GitHub Blog
The GitHub Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
N
News and Events Feed by Topic
Attack and Defense Labs
Attack and Defense Labs

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录 2025 Python 版本性能测试 Flutter Hello World Flutter 安装环境配置 Ubuntu VMware 硬盘扩容后 SMBus Host controller not enabled 报错问题解决 Python NetworkX 教程 Docker GPU 报错 - Failed to initialize NVML Unknown Error 解决方案 Python matplotlib 图表绘制 cuda-toolkit 安装替代 Cuda 与 Cudnn Jinja2 Python 利用 docxtpl 和 Jinja2 生成基于模板的 Word 文档 Docker 实现 CPU 核心隔离 LoFTR 基于 Transformer 的特征提取匹配算法 OmniGlue 特征匹配 SuperGlue 使用图神经网络学习特征匹配 Ubuntu 下将 xlsx 文件按照 sheet 转换为 图片 Python 使用 SQLAlchemy Python FastAPI 教程 openwrt 软路由配置安装 Nav2 地图文件(PGM/YAML)规范标准 3D OBJ 模型转换为 glb 瓦片格式 Python 源码 Redis 数据库介绍 Ubuntu 22.04 内核自动升级导致 MongoDB 7.0.12 错误记录 ubuntu 20.04 安装 ROS Noetic ubuntu 18.04 安装 ROS Melodic VMware Workstation Pro 个人免费版下载、安装、使用指南 Hybrid A-star 路径规划 Reeds-Shepp 曲线 Dubins 曲线 Linux kvm 虚拟机网络不通的问题解决方法 Ubuntu 自动内存清理 BiliBili 缓存视频转 mp4 Python 求解线性规划 3D Gaussian Splatting 官方源码实践记录 Ubuntu 22.04 安装 Colmap 对数几率 odds Ubuntu nmcli 网络管理工具使用指南 SuperPoint 自监督深度学习特征点提取 SyncTV Music Tag Web 在线音乐信息整理工具 ncm 格式转 mp3 MusicBrainz 音乐元数据百科数据库 Ubuntu 网络流量监控工具 私人云音乐平台 Navidrome 入门 手眼标定 四元数(Quaternions) OHTTPS 实现免费自动 https 证书申请、更新、部署 ubuntu 22.04 安装 CloudCompare 单机 KVM 虚拟机冷迁移 Ubuntu 22.04 使用 mdadm 实现软 raid 小鱼 一键安装 ROS-humble Fluid -46- 基于 Simpletex API 构建公式识别页面 公式识别 API 简介 -- Simpletex 使用 Python web 部署库 waitress 3D Gaussian Splatting for Real-Time Radiance Field Rendering Ubuntu Swap 简介与空间扩展 Ubuntu 24.04 安装 forticlient Clash Verge 使用 MongoDB 7.0.17 集群 Docker 构建源码 Error code - 2013. Lost connection to MySQL server during query 问题解决 Python 日志记录库 loguru 使用指北 Python 实现 Web 日志查看服务 MySQL LOAD DATA LOCAL INFILE 极速数据加载 Image size exceeds limit of 89478485 pixels 解决方案 Docker 使用 NVIDIA GPU 驱动错误解决 阿里云 docker 镜像仓库 Ubuntu中没有wired connected的解决方案 MinIO 简介 subconverter 代理订阅格式转换 修复 node –openssl-legacy-provider is not allowed in NODE_OPTIONS 错误 Ubuntu 使用 Clash For Linux 客户端
ImageMagick 教程
Yiwei Zhang · 2025-06-11 · via 又见苍岚

mageMagick是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。ImageMagick的大多数功能的使用都来源于命令行工具。本书将详细介绍ImageMagick命令行的使用方法。

简介

ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存,对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。同时ImageMagick提供了一个高质量的2D工具包,部分支持SVG。ImageMagic的主要精力集中在性能,减少bug以及提供稳定的API和ABI上。

功能

  1. 将图片从一个格式转换到另一个格式,包括直接转换成图标。
  2. 改变尺寸、旋转、锐化(sharpen)、减色、图片特效
  3. 缩略图片的合成图( a montage of image thumbnails)
  4. 适于web的背景透明的图片
  5. 将一组图片作成gif动画,直接convert
  6. 将几张图片作成一张组合图片,montage
  7. 在一个图片上写字或画图形,带文字阴影和边框渲染。
  8. 给图片加边框或框架
  9. 取得一些图片的特性信息

10,几乎包括了gimp可以作到的常规插件功能。甚至包括各种曲线参数的渲染功能。只是那命令的写法,够复杂。

安装

1
sudo apt install imagemagick

查看版本:

1
2
3
4
5
6
convert -version
Version: ImageMagick 6.9.11-60 Q16 x86_64 2021-01-25 https://imagemagick.org
Copyright: (C) 1999-2021 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP(4.5)
Delegates (built-in): bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png tiff webp wmf x xml zlib

对于 7+ 的 imagemagick 工具:

1
2
3
4
5
6
7
magick --version
Version: ImageMagick 7.1.1-34 Q16-HDRI aarch64 22301 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP(5.0)
Delegates (built-in): bzlib fontconfig freetype gslib heic jng jp2 jpeg jxl lcms lqr ltdl lzma openexr png ps raw tiff webp xml zlib zstd
Compiler: gcc (4.2)

命令结构

ImageMagick 的命令行由下面这些元素构成:

  1. 一个,或多个文件名。
  2. 零个,一个,或多个图像设置项。
  3. 零个,一个,或多个图像操作项。
  4. 零个,一个,或多个图像序列操作项。
  5. 零个,一个,或多个图像组。
  6. 零个,或一个图像输出名(convert, composite, montage, compare, import, conjure,这些需要)。

输入文件名

ImageMagick 扩展了“输入文件名”它原本的含义,现在它包括了:

文件名通配符

在 Unix shell 环境下,有一些特殊的字符是作为通配符使用的,如 *? 。ImageMagick 在各个平台上都支持文件名通配符。假如你想把某目录下的 1.jpg,2.jpg,3,jpg,4.jpg 和 5.jpg 这些文件转成一个 GIF 动画,那么你可以使用这条命令方便地引用所有的 JPEG 文件:

1
convert *.jpg images.gif

明确的图片格式

图像的数据,都是以一种确定的格式存储的,比如常见的 JPEG,PNG,TIFF 等。ImageMagick 在读取,解析图片之前,必须要知道图片的格式。

多数图像格式,在文件中都设有一些标识来表明它属于哪种格式。如果没有,ImageMagick 会根据文件的扩展名来判断。如 image.jpg 会告诉 ImageMagick 这是一张 JPEG 格式的图片。某些情况下,ImageMagick 不知道图片的格式,那么这时就需要手动指定了。如,我们有一张名为 image,存储了 RGB 三原色位深原始信息的图片(未经过任何压缩的位图),ImageMagick 当然无法自己得知它是什么格式的图片,所以,这时就需要我们明确指定图片格式。

1
convert -size 640x480 -depth 8 rgb:image image.png

内置图像或图案

ImageMagick 有许多内置的图像和图案,要使用 checkerboard 中的图案:

1
convert -size 640x480 pattern:checkerboard checkerboard.png

标准输入输出

Unix 和 Windows 都支持通过管道来重定向输入输出。ImageMagick 支持从标准的输入输出流中读写图像数据,由依次使用一个虚文件名 ‑ 来实现。下面的例子把 convert 的输出通过管道重定向到了 display。

1
convert logo: gif:- | display gif:-

(logo:理解成是一个内置的图像,logo 这种特殊类型。)

第二个用于确定图像格式的 gif:是可选的,因为 GIF 这种格式有自己的标识,ImageMagick 认识它。convert 同样能以这种方式接受标准输入:

1
convert rose: gif:- | convert - -resize "200%" bigrose.jpg

其它的一些管道,你可以通过它们的文件描述符来访问。文件描述符0,1。2已经被预定义为标准输入,标准输出,错误输出。如果一个管道被指定为文件描述符 N,那么你可以通过 fd:N 来使用它。下一个例子展示了如何通过管道重定向,把文件描述符3,4的数据添加到文件描述符5中。

1
convert fd:3 fd:4 -append fd:5

ImageMagick 6.4.9-3 中才添加了对文件描述符的支持。

对于 Python,你可以通过调用 File 对象的 fileno() 方法来获取文件描述符。

在需要的时候,你也可以为文件描述符指定具体的图像格式:

1
convert gif:fd:3 jpg:fd:4 -append tif:fd:5

一张图片中的某些帧

某些图片格式可以包括有多个图像帧。你可以只获取第一帧, 最后一帧, 或中间的某些帧。为此,你可以在文件名之后,以方括号括起来的形式指定帧。下面的例子中,对于一个有多帧的 GIF 图片,我们只取其第一帧。

1
convert 'images.gif[0]' image.png

在 Unix shell 的环境下,一般中括号是会被转义的,所以,我们需要使用单引号把文件名引起来。Windows 的命令行环境下不用单引号也可以,但多写一对单引号并不会有什么问题。另外,对于单引号和双引号的作用,在 Unix 和 Windows 这两个平台上,常常是相反的,所以,如果你使用 Windows,那么请注意将我们例子中的单引号改为双引号。

你也可以一次获取多帧,在方括号中标出一个范围即可,如下面的例子,我们获取了前四帧的图像:

1
convert 'images.gif[0-3]' images.mng

最后,你可以一次获取非连接的多帧。下面的命令以3,2,4的顺序获取图像:

1
convert 'images.gif[3,2,4]' images.mng

注意上面的最后两个命令,输出被写入了一个类型为 MNG 的文件当中。因为 MNG 支持保存多帧图像,而如 JPG 之类的格式只是保存单帧的图像。在下面“图像输出名”一节我们还会介绍这方面的内容。

一张图片中的部分区域

最原始的位图图像,就是一个表示出各像素点颜色的序列,它的文件中没有任何的其它像宽、高,格式标识等附加信息。对于这类原始的图像数据,在处理时我们必须明确指定图像的宽和高,或者给出一个范围。在下面的例子中,我们要处理的图片是一个8位的 RGB 位图,宽是 6000,高为 4000,而我们只需要获取一块中心附近 600×400 的图像信息。

1
convert -size 6000x4000 -depth 8 'rgb:image[600x400+1900+2900]' image.jpg

使用 ‑extract 选项也可以实现相同的功能:

1
convert -size 6000x4000 -depth 8 -extract 600x400+1900+2900 rgb:image image.jpg

缩放了的内嵌图像

读入一些图片的同时,重新定义它们的尺寸是很方便的。假设你有很多的大的 JPEG 图片需要转换成一组 PNG 格式的缩略图:

1
convert '*.jpg' -resize 120x120 thumbnail%03d.png

这里,所以的图片都会被读入并且分别被重定义大小。在读入的同时定义尺寸在效率上更好,同时资源占用也更少:

1
convert '*.jpg[120x120]' thumbnail%03d.png

裁切了的内嵌图像

1
convert '*.jpg' -crop 120x120+10+5 thumbnail%03d.png
1
convert '*.jpg[120x120+10+5]' thumbnail%03d.png

文件名引用

靠一个另外的文件名,来表示实际要读取的图像文件名,实现这个功能有两种方法,第一种方法是使用 @ 这个符号,来指定一个文件,这个文件中包含有实际需要读取的图像文件名,如一个名为 myimages.txt 的文本文件中有如下内容:

1
2
3
frame001.jpg
frame002.jpg
frame003.jpg

下面的命令,ImageMagick 就会读入 frame001.jpg,frame002.jpg,frame003.jpg。

1
convert @myimages.txt mymovie.gif

另一种方法,是在文件名中使用格式化字符串,然后在后面的方括号中指定一个范围。看下面的例子:

1
convert image-%d.jpg[1-5]

ImageMagick 实际上会去读取如下的图像:

1
2
3
4
5
image-1.jpg
image-2.jpg
image-3.jpg
image-4.jpg
image-5.jpg

图像设置

命令行中的一个设置项,可以作用于读入的图像,图像操作,或者将会被输出的图像。一个设置项被设置后会一直发挥作用除非它被重置或命令执行完毕。图像设置命令包括有:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-adjoin -affine -alpha -antialias -authenticate
-background -bias -black -point -compensation
-blue -primary -bordercolor -caption -channel
-comment -compress -debug -define -delay -density
-depth -display -dispose -dither -encoding -endian
-extract -family -fill -filter -font -format
-fuzz -geometry -gravity -green -primary -interlace
-intent -interpolate -label -limit -linewidth -log
-loop -mask -mattecolor -monitor -orient -page
-pointsize -preview -quality -quiet -red -primary
-region -render -repage -sampling -factor -scene
-seed -size -stretch -stroke -strokewidth -style
-texture -tile -transparent-color -treedepth -type
-undercolor -units -verbose -virtual-pixel -weight

图像操作

图像操作项与图像设置项不同,它只作用于紧接着存在的一个图像,仅仅是这一个图像,之后,图像操作项就会失效。

在这里, 我们说明一下。命令行参数有三种,前面讲过的图像设置项,这里的图像操作项,以及后面会讲到的序列操作项。

图像操作项包括下面这些。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-annotate -black -threshold -blur -border -charcoal
-chop -clip -clip-path -clip -mask -colors -colorize
-colorspace -compose -contrast -convolve -crop -cycle
-despeckle -draw -edge -emboss -enhance -equalize
-evaluate -extent -flip -flop -floodfill -frame
-gamma -gaussian -blur -implode -lat -level -map -mask
-median -modulate -monochrome -negate -noise -normalize
-opaque -ordered-dither -paint -posterize -raise
-profile -radial -blur -raise -random-threshold
-resample -resize -roll -rotate -sample -scale
-sepia -tone -segment -shade -shadow -sharpen -shave
-shear -sigmoidal -contrast -solarize -splice -spread
-strip -swirl -threshold -transparent -thumbnail -tint
-transform -trim -unsharp -version -wave -white-point
-white -threshold

下面例子,‑negate 这项只对 wand 有效,对 wizard 是无效的(但是,如果把它放在 wizard后的话,则会作用于这两张图)。

1
convert wand.png -negate wizard.png images.png

图像序列操作项

一个图像序列操作项,只作用于紧接着存在的一个图像序列,它们是。

1
2
3
4
-append -average -clut -coalesce -combine -composite
-crop -deconstruct -delete -flatten -fx -identify
-insert -map -morph -mosaic -process -reverse
-separate -swap -write

图像定位

许多命令行选项都有一个 geometry 参数,用于指定图像的宽,高等信息。因为图像的坐标系,尺寸,位置等信息是我们经常会用到的,所以为了方便,geometry 这个参数可以用不同的格式给出。关于这点,接下来我们会详细地介绍。

一些命令行选项可接受如下多种格式的 geometry 参数。请记住, 它们处理具体参数时的效果是不同的,详细的内容可查阅它们各个的说明文档。

1
2
3
4
-adaptive-resize -border -borderwidth -chop -crop
-density -extent -extract -frame -geometry
-iconGeometry -liquid-rescale -page -region -repage
-resize -sample -scale -shave -splice -thumbnail -window

geometry 参数可以使用下表列出的多种格式指定,在表后我们会讨论更多的细节。最常用的一种格式是 size[offset],意为 size 是必须给出的,而 offset 则是可选的。不过,有时 [size]offset 也行。同时要注意, geometry 这个参数中,绝不允许出现空格符。

size 的形式 大概的说明(实际效果对于不同的选项可能差别较大)
scale% 宽和高同时根据指定的百分比缩放
scale‑x%scale‑y% 宽和高根据指定的百分比分别缩放
width 指定宽度, 高度根据原尺寸比例自动确定
width x height 指定最大的宽度和高度, 图像宽高原比例保存不变(注意没空格, 下同)
width x height^ 指定最小的宽度和高度, 宽高原比例不变
width x height! 指定宽度和高度, 忽略原始比例
width x height> 和 width x height 一样, 但只对比这个尺寸大的图像有作用
width x height< 和 width x height 一样, 但只对比这个尺寸小的图像有作用
area@ 等比例缩放图像, 使其总像素值不大于 area.
(对于一张 1:1 的图, 若设置为121@, 则结果正好是 11x11.)

注意,上面结尾的修辞字符是可以组合使用的。

{size}{offset} 指定 offset 偏移(默认是 +0+0).
{size} 的格式见前一个表格.
{+‑}x{+‑}y 指定水平和垂直的偏移, 以像素为单位, 两者必须同时指定
偏移量对 ‑gravity 设置项有效, 对其它的带 % 或另外的 size 操作无效.

对宽和高的基本设置

下面展示了一些简单的例子,用以说明如何给出 ‑resize 的 geometry 参数。我们将使用内置的 logo:这张图作为我们的“输入图像”。logo:这张原始图片宽为640像素,高480像素,记为 640×480。就像你看到的,宽总在高的前面。这条规则同样适用于我们可能会讲到的“坐标”或“偏移”。

1
2
3
4
5
$ convert logo: -resize '200%' bigWiz.png
$ convert logo: -resize '200x50%' longShortWiz.png
$ convert logo: -resize '100x200' notThinWiz.png
$ convert logo: -resize '100x200^' biggerNotThinWiz.png
$ convert logo: -resize '100x200!' dochThinWiz.png

忽略宽或高的表示方法

看一些例子:

1
2
3
4
$ convert logo: -resize '100' wiz1.png
$ convert logo: -resize 'x200' wiz2.png
$ convert logo: -resize '100x200>' wiz3.png
$ convert logo: -resize '100x200<' wiz4.png

请注意引号的使用。上面的例子,包括后面的例子中,我们都使用引号把 geometry 引起来了的。很多时候,这样做不是必须的,但当你使用了 <>; 的时候, 就一定要使用引号,否则这两个符号会被当成命令行的重定向操作处理。另外,在 Windows 平台上,^ 也必须使用引号。所以,为了安全起见,我们最好养成对于 geometry 总是使用引号的习惯。

图像定位中的偏移

我们通过一些例子来说明 geometry 参数中的 offsets。使用它的一个典型情形是在 ‑region 这个选项中。‑region 跟在一些其它的命令后,用于指定一块矩形区域。所以,你除了需要指定这个矩形区域的宽和高,还需要指定它的一个起始点(左上角的点)。下面的第一个例子中,我们指定了一个 100×200 的区域,位置在 x=10,y=20,或者我们应该写成 (x,y) = (10,20)。

1
2
3
$ convert logo: -region '100x200+10+20' -negate wizNeg1.png
$ convert logo: -region '100x200-10+20' -negate wizNeg2.png
$ convert logo: -gravity center -region '100x200-10+20' -negate wizNeg3.png

注意,offsets 必须带上 +/‑。它表示的是一个相对偏移,而不是一个绝对坐标。offsets 的参照点不是固定的,但默认情况下,它是 (0,0),即左上角,上面的第一个例子就是这种情况。

offsets 有可能“出界”,就像第二个例子中的那样, -10+20,对于这个有一部分出界的矩形执行 ‑negate,实际的效果也就相当于 90×200+0+20。

第三个例子中,一来就使用了 ‑gravity 选项,它把当前坐标原点(或叫参照原点)设置为图像的正中,即 (320,240) 的位置,因为这张图的尺寸是 640×480。这意味着后面的 offsets 的实际效果与前面两例就有所不同,变成了 (320-10, 240+20) = (310,260)。 同时 100×200 也不再是根据左上角来计算,而是根据中心点计算。即以 (310,260) 为中心的一个 100×200 的矩形。显然,它的左上角在 (310-50,260-100) = (260,160)。

图像组

在学校时,老师肯定有教过你,在把结果直接写在答题卷上前,或许你应该先在草稿上演算一番。这里我们谈的“图像组”大概就是这个草稿纸的意思。它让你在一个隔离的组中处理一张图像或一个图像序列,处理完后,把结果返回到正常流程中。图像组用一对括号标示,里面的所有操作只对当前组有效。如下例,我们限制 ‑rotate 操作只对 wizard.gif 有效:

1
$ convert wand.gif \( wizard.gif -rotate 30 \) +append images.gif

特别注意,在 Unix 平台下,用于图像组的括号是需要使用 \ 转义的,因为小括号在 shell 中有其它的特殊作用。但是,Windows 平台下的小括号不需要转义。另外,在小括号内的两侧,都有一个空格, 请留意。

前面我们已经谈到了一些命令行中的操作项,不过,下面这几个操作项对于处理一个图像组是比较常用的:

1
-clone -delete -insert -swap

上面几个操作项的参数,都是一个索引值,用以表示在图像组中的某个图像。图像组中的第一个图像的索引值是 0。同时,这个索引值你也可以使用负数,-1 就是图像组中的最后一个图像。

图像输出名

ImageMagick 扩展了原来的“输出文件名”的概念,在 ImageMagick 中,一个图像输出可以是:

  1. 一种明确的图像格式。
  2. 输出到系统的标准输出。
  3. 文件名引用。

明确的图像格式

图像信息都是以某种即定的格式存储起来的,这些格式包括我们熟悉的 JPEG,PNG,TIFF 等。ImageMagick 在写出某个图像时,必须知道应该使用哪一种格式写出。通常情况下,ImageMagick 可以根据扩展名来判断格式,如,对于 image.jpg ImageMagick 会以 JPEG 格式来写出。某些情况下没有给出图像的格式信息,而你又没有明确指定,这时,ImageMagick 会以图像原来的格式写出。比如,我们希望把图像存为名为 image 的原始 RGB 位图:

1
$ convert image.jpg rgb:image

标准输出

Unix 支持通过管道在各个程序间重定向输入输出。ImageMagick 可以使用一个特殊的文件名 ‑ 来实现管道间的重定向操作。下面的例子中,我们把 convert 的输出重定向到 display 中:

1
$ convert logo: gif:- | display gif:-

这里,你不一定要明确指定图像格式,GIF 这种格式有它自己的标示,ImageMagick 可以自动正确地识别出。

文件名引用

另外还有一种输出方式,是使用格式化字符串来输出多个图像。假如我们把输出图像名写成 image‑%d.jpg ,同时我们的图像序列中有 3 个图像,那么会得到如下的多个输出结果:

1
2
3
image-0.jpg
image-1.jpg
image-2.jpg

还有一种情况,假如你希望用图像的某些属性来作为其文件名的一部分,那么可以这样:

1
$ convert rose: -set filename:area '%wx%h' 'rose-%[filename:area].png'

其结果是:

1
rose-70x46.png

参考资料

文章链接:
https://www.zywvvd.com/notes/tools/imagemagic/imagemagic-tutorial/