ImageMagick - Arch Linux 中文维基

跳至內容

# ImageMagick

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 ImageMagick，最近一次同步於 2025-02-01，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

根據英文維基百科：

  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 的手冊頁。

提示：安裝軟體包後，可在本地訪問官方 HTML 文檔：

- 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` 參數設置延時，在此期間可執行操作（例如最小化某些窗口）。

注意：若需使用 graphicsmagick 的等效功能，只需在命令前添加 "gm"，例如 `$ 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

注意：如果某些程序（例如 zathura（英語：zathura））的截圖顯示為空白，請嘗試在 `xdotool` 命令後添加 `-frame` 或移除 `-f`。

### 加密圖像數據

加密方法：

    $ 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 腳本

分類：​

- 多媒體

ImageMagick
新增話題