根據英文維基百科:
- ImageMagick is a free and open-source software suite for displaying, converting, and editing raster image and vector image files. It can read and write over 200 image file formats.
- (譯文)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
常見操作
格式轉換
ImageMagick 通過文件擴展名確定格式。例如,要將給定的 .png 圖像轉換為 .jpg 格式,需要使用:
$ magick 图像.png 图像.jpg
拼接
將多張圖片拼接為一張:
$ magick -append 输入1.png 输入2.png ... 输出.png
裁剪與切除
對多張圖像進行裁剪並轉換格式:
$ mogrify -crop 宽x高+X+Y -format jpg *.png
其中寬和高表示裁剪後的輸出圖像尺寸,X 和 Y 表示相對於輸入圖像的偏移量。
也可使用 -chop
,通過 -gravity 參數切除指定單側邊框,這種方式無需複雜坐標計算,操作更簡便:
$ magick 红色边框.gif -gravity South -chop 0x10 切除底部.gif
限制文件大小
在指定文件大小下獲得合理畫質:
$ magick 图像.jpg -define jpeg:extent=3000KB 压缩图像.jpg
這有助於縮短傳輸時間。注意 -quality
參數(如以下用法:)
$ magick 图像.jpg -quality 85% 压缩图像.jpg
當畫質與文件大小的對應關係不明確時難以使用。
截屏
使用 import(1) 命令便捷截取當前系統屏幕:
$ import -window root screenshot.jpg
若不帶 -window
參數運行 import
,可交互式地選擇窗口或其它任意區域。使用 -pause
參數設置延時,在此期間可執行操作(例如最小化某些窗口)。
$ gm import -window root screenshot.jpg
。在 X11 中進行多屏幕截屏
若使用雙屏模式(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 截屏.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 显示屏$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 密码词组 | magick 图像.jpg -encipher - -depth 8 png24:图像.png
解密方法:
$ echo 密码词组 | magick 图像.png -decipher - 图像.jpg
有關此類命令可能遇到的各種問題及優化建議(如加密後文件格式的指定),參見官方文檔 Encrypting Image Data。
一些圖像格式的元數據支持 cipher
標籤,可用於檢測圖像是否加密,但該標籤可能被 EXIF 編輯工具移除或偽造。
$ identify -verbose image.png
通用的檢測方法可通過分析像素分量分布實現:若其熵值超過特定閾值,數據可視為隨機(即可能經過加密)。但需注意菱形平方算法生成的圖像也會產生類似特徵,屬於典型誤判案例。
用圖像創建 PDF
參見 PDF、PS 與 DjVu#用圖像創建 PDF。有關背景信息,參見此 Stack Exchange 帖子。
另見
- ImageMagick 官網,提供了廣泛的參數列表、示例和展示
- 應用程式列表/多媒體#圖像處理
- Fred's ImageMagick Scripts,包含大量的 ImageMagick 腳本