ImageMagick 是一整套用于圖像處理的跨平臺的命令行工具唱较,大部分 Linux 發(fā)行版都可以直接通過包管理器安裝(如 Ubuntu 系統(tǒng):
sudo apt-get install imagemagick
)钉鸯。其他平臺也可以從官網(wǎng)下載對應(yīng)的編譯好的程序。
通過命令行,ImageMagick 可以很高效的對圖片進(jìn)行編輯剔交、轉(zhuǎn)換和創(chuàng)作,也支持批量處理多張圖片改衩,或者內(nèi)嵌到 Bash 腳本中岖常。
這里簡單介紹下 ImageMagick 常見的幾種用法。
格式轉(zhuǎn)換
ImageMagick 提供了 convert
命令用于接收圖片文件并對其進(jìn)行特定的操作后輸出葫督。其中最基本的用法即改變圖片的格式竭鞍。
如將 PNG 格式的圖片轉(zhuǎn)為 JPEG 格式:
$ convert image.png image.jpg
對于 JPEG 圖片,在轉(zhuǎn)換時還可以指定壓縮等級橄镜,如:
$ convert image.png -quality 95 image.jpg
其中壓縮等級(-quality
)的值為 1-100偎快,默認(rèn)使用輸入圖片的壓縮等級。如該值為空洽胶,則壓縮等級默認(rèn)為 92 晒夹。
改變圖片大小
convert 命令還可以用來改變圖片的大小。如下面的命令可以將原圖片轉(zhuǎn)成大小為 200x100 像素的圖片:
$ convert image.png -resize 200x100 out.png
需要注意的是姊氓,在上面的命令中丐怯,ImageMagick 會優(yōu)先保持原圖片的比例(否則圖片會發(fā)生一定程度的變形)。這樣的結(jié)果是翔横,改變后的圖片可以正好放進(jìn)一個 200x100 大小的區(qū)域读跷,但圖片本身并不一定是精確的 200x100 像素。
如果就是需要將原圖片轉(zhuǎn)換為特定大小禾唁,而不用考慮形變的影響效览。可以使用如下命令:
$ convert image.png -resize 200x100! out.png
當(dāng)然更多的時候荡短,指定輸出圖片的大小時并非一定需要“寬x高”這樣的形式钦铺,其實只需要指定寬或者高中的一項即可。如指定輸出圖片的寬度:
$ convert image.png -resize 200 out.png
或者指定輸出圖片的高度:
$ convert image.png -resize x100 out.png
旋轉(zhuǎn)與翻轉(zhuǎn)
將原圖片旋轉(zhuǎn) 90° 后輸出:
$ convert image.jpg -rotate 90 image-rotated.jpg
指定的角度為正時即順時針旋轉(zhuǎn)圖片肢预,為負(fù)時逆時針旋轉(zhuǎn)矛洞。
左右翻轉(zhuǎn):
$ convert image.png -flop out.png
上下翻轉(zhuǎn):
$ convert image.png -flip out.png
PS:包括前面的幾種情況在內(nèi),如果輸出圖片的文件名和原圖片相同烫映,則改變后的圖片會直接覆蓋掉原圖片沼本。
裁剪與縮放
convert 命令支持等比例縮放圖片,如將圖片縮小為原來的一半:
$ convert image.png -scale 50% out.png
同時 convert 也可以對圖片進(jìn)行裁剪锭沟,包括自動裁剪(剔除圖片周圍空白的部分或邊框等)和自定義范圍的裁剪抽兆。
自動裁剪:$ convert image.png -trim out.png
自定義裁剪:$ convert image.jpg -crop 600x600+240+240 out.jpg
其中 -crop
的參數(shù)為 寬x高+橫坐標(biāo)偏移量+縱坐標(biāo)偏移量
的形式,即寬和高用來定義裁剪的矩形區(qū)域的范圍族淮,橫縱偏移量用來指定裁剪區(qū)域的相對位置(都為 0 時表示從最左上角開始)辫红。
需要注意的是凭涂,當(dāng)用 -crop
選項裁剪 PNG 和 GIF 格式的圖片時(這兩種格式的圖片包含“虛擬畫布”),并不是以畫面的實際像素為基準(zhǔn)贴妻,而是需要參考“畫布”的大小和位置切油,所以有時候并不會達(dá)到預(yù)期的效果。
詳細(xì)介紹可參考官方文檔 Cutting and Bordering 名惩。
shave
裁剪圖片有時候可以采取相反的思路澎胡,即剔除圖片中不需要的部分:
$ convert image.png -shave 100x50 out.png
將輸入圖片的左右兩邊剔除 100 像素,上下兩邊剔除 50 像素娩鹉,獲取剩余的部分并輸出攻谁。
色彩、亮度與飽和度
convert 命令可以通過 -modulate
選項調(diào)整圖片的色彩弯予、亮度和飽和度戚宦。如:
$ convert image.png -modulate 150,100,100 out.png
上述命令會將原圖片的亮度增大為原來的 150% 。其中 150,100,100
三個數(shù)值分別表示亮度锈嫩、飽和度和色相受楼。
100 為基準(zhǔn)值,即大于 100 表示增強某種屬性祠挫,小于 100 表示減弱某種屬性。
透明度悼沿、色彩與位深度
- 將透明(alpha)通道替換為純黑色:
$ convert image.png -flatten out.png
- 將原彩色圖片轉(zhuǎn)為灰度模式:
$ convert image.png -type Grayscale out.png
- 降低圖片的位深度(bits per pixel):
$ convert image.png -depth 8 out.png
- 減少圖片色彩:
$ convert image.png -dither -colors 256 out.png
PS:dither
會增加像素點等舔,如需要在減少色彩的同時不應(yīng)用 dither 效果,將命令中的 -dither
替換為 +dither
糟趾。
銳化與虛化
銳化
$ convert image.png -sharpen 2 out.png
模糊
$ convert image.png -blur 1 out.png
添加文字和邊框
添加水印
$ convert image.jpg -fill red -draw "text 20 20 '? 2019 example.com'" out.jpg
可以自行定義添加文字的位置(默認(rèn)為左上角)和字體類型:
$ convert image.jpg -fill red -gravity SouthEast -font arial -draw "text 20 20 '? 2019 example.com'" out.jpg
添加邊框
$ convert image.png -bordercolor blue -border 50 out.png
其中 -bordercolor
用于指定邊框顏色慌植,-border
用于指定邊框?qū)挾龋梢詾榘俜直取?/p>
組合疊加
組合多張圖片(垂直方向)
$ convert x1.png x2.png x3.png -append out.png
組合多張圖片(水平方向)
$ convert x1.png x2.png x3.png +append out.png
疊加圖片
$ composite -gravity center img1.png img2.png out.png
將 img1.png 疊加到 img2.png 上并作為 out.png 輸出(方位為正中間)
應(yīng)用效果
ImageMagick 可以對圖片應(yīng)用多種樣式的特效义郑。如 "charcoal" 效果:
$ convert image.png -charcoal 2 out.png
其中
-charcoal
后面的數(shù)字 2 用于指定該效果的強度蝶柿。
"implode" 效果:
$ convert image.png -implode 1 out.png
結(jié)合多種操作
前面提到的多種處理方式實際上可以任意組合使用,使得只用一條命令即可以同時完成多種操作非驮。如:
$ convert image.png -resize 400x400 -rotate 180 -charcoal 4 -quality 95 out.jpg
批量處理
借助 Bash 腳本(Linux 系統(tǒng))的強大功能交汤,ImageMagick 可以很方便的批量處理多張圖片。
如下面的命令可以查找當(dāng)前目錄下所有的 PNG 圖片劫笙,將它們每一張都旋轉(zhuǎn) 90°芙扎,再將原文件名添加 “rotated-” 前綴后保存:
$ for file in *.png; do convert $file -rotate 90 rotated-$file; done
Windows 系統(tǒng)上是沒有原生的 Bash Shell 的,但是可以下載安裝某些軟件以支持 Bash 環(huán)境填大,比如 Git for Windows戒洼。
其實使用 Windows 系統(tǒng)自帶的 PowerShell 也可以完成同樣的批量操作:
PS > dir *.png | foreach { convert $_ -rotate 90 rotated-$($_.basename).png }
有興趣的話,可以多玩幾下允华。
GIF 動圖制作
可以借助 convert 命令將多張圖片組合為一張重復(fù)播放的 GIF 動圖:
$ convert -delay 20 -loop 0 *.png out.gif
其中 -delay
選項用于指定圖片切換的時間間隔圈浇,單位為毫秒寥掐。
參考文章
ImageMagick Tutorial
ImageMagick basics