ImageMagick
根据维基百科
- ImageMagick 是一套免费开源的软件套件,用于显示、转换和编辑栅格图像和矢量图像文件。它可以读取和写入超过 200 种图像文件格式。
安装
安装 imagemagick 软件包。或者安装 graphicsmagick 以使用 GraphicsMagick,它是 ImageMagick 的一个分支,强调 API 和命令行界面的稳定性。
用法
请参阅 ImageMagick(1),或 gm(1) (针对 GraphicsMagick)。
- ImageMagick 位于
/usr/share/doc/ImageMagick-7/www/index.html
- GraphicsMagick 位于
/usr/share/doc/GraphicsMagick/www/index.html
常用操作
在图像格式之间转换
此功能的基本用法是将现有图像格式和所需图像格式指定为文件扩展名。例如,要获取给定 .png 图像的 .jpg 表示,请使用
$ magick image.png image.jpg
追加
将多张图片合并为一张
$ magick -append input.pngs output.png
裁剪,切除
要裁剪多张图片的一部分并将其转换为另一种格式
$ mogrify -crop WIDTHxHEIGHT+X+Y -format jpg *.png
其中 WIDTH 和 HEIGHT 是裁剪后的输出图像大小,X 和 Y 是相对于输入图像大小的偏移量。
也可以使用 -chop
从图像上切除单边,使用 gravity 选择该边。这样更简单,因为涉及的数字更少,或者需要试错。
$ magick frame_red.gif -gravity South -chop 0x10 chop_bottom.gif
限制存储大小
为了在给定的存储大小下获得合理的质量
$ magick image.jpg -define jpeg:extent=3000KB image_small.jpg
希望这将缩短传输时间。请注意,当质量和存储大小之间的相关性不明确时,-quality
,例如
$ magick image.jpg -quality 85% image_small.jpg
更难使用。
屏幕截图
截取当前系统屏幕截图的简单方法是使用 import(1) 命令
$ import -window root screenshot.jpg
运行不带 -window
选项的 import
允许交互式选择窗口或任意区域。使用 -pause
可以指定延迟,您可以在该延迟期间执行例如最小化某些窗口等操作。
$ gm import -window root screenshot.jpg
。多 X 屏幕截图
如果您运行 twinview 或 dualhead,只需截取两次屏幕截图,然后使用 imagemagick
将它们粘贴在一起
$ import -window root -display :0.0 -screen /tmp/0.png $ import -window root -display :0.1 -screen /tmp/1.png $ convert +append /tmp/0.png /tmp/1.png screenshot.png $ rm /tmp/{0,1}.png
单个 Xinerama 显示器截图
基于 Xinerama 的多显示器设置只有一个虚拟屏幕。如果物理屏幕的高度不同,您会在屏幕截图中发现空白区域。在这种情况下,您可能需要单独截取每个物理屏幕的屏幕截图。只要可以从 X 服务器获得 Xinerama 信息,以下方法就有效
#!/bin/sh xdpyinfo -ext XINERAMA | sed '/^ head #/!d;s///' | while IFS=' :x@,' read i w h x y; do import -window root -crop ${w}x$h+$x+$y head_$i.png done
活动/焦点窗口的屏幕截图
以下脚本截取当前焦点窗口的屏幕截图。它适用于兼容 EWMH/NetWM 的 X 窗口管理器。为了避免覆盖之前的屏幕截图,当前日期用作文件名。
#!/bin/sh activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)") activeWinId=${activeWinLine:40} import -window "$activeWinId" /tmp/$(date +%F_%H%M%S_%N).png
或者,无论是否支持 EWMH,以下方法都应该有效
$ import -window "$(xdotool getwindowfocus -f)" /tmp/$(date +%F_%H%M%S_%N).png
图像数据加密
加密
$ echo pass_phrase | magick image.jpg -encipher - -depth 8 png24:image.png
这可以通过以下方式解密
$ echo pass_phrase | magick image.png -decipher - image.jpg
强烈建议阅读 Encrypting Images 中的讨论,了解此类命令的各种问题和建议。
具有 cipher
标签的图像格式的元数据可用于测试加密。但是,它可以被 EXIF 编辑程序删除或欺骗。
$ identify -verbose image.png
通常,可以通过检查像素分量的分布来完成栅格图像是否已加密的测试。如果它超过某个阈值,则数据可以被认为是随机的,并且可能是加密的候选对象。但是,误报的例子是用 Diamond-square 算法 创建的图像。
从图像创建 PDF
请参阅 PDF、PS 和 DjVu#从图像创建 PDF。有关一些背景知识,请参阅 stackexchange 帖子。
参见
- ImageMagick 网站,其中包含大量选项、示例和展示。
- 应用程序列表/多媒体#图像处理
- Fred's ImageMagick Scripts,其中包含大量 ImageMagic 脚本