ImageMagick 圖片處理常用實例簡介

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

trim

自定義裁剪$ convert image.jpg -crop 600x600+240+240 out.jpg

crop

其中 -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

PSdither 會增加像素點等舔,如需要在減少色彩的同時不應(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

其中 -charcoal 后面的數(shù)字 2 用于指定該效果的強度蝶柿。

"implode" 效果:
$ convert image.png -implode 1 out.png

Implode

結(jié)合多種操作

前面提到的多種處理方式實際上可以任意組合使用,使得只用一條命令即可以同時完成多種操作非驮。如:
$ convert image.png -resize 400x400 -rotate 180 -charcoal 4 -quality 95 out.jpg

Combination

批量處理

借助 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 }

Batch Processing

有興趣的話,可以多玩幾下允华。

GIF 動圖制作

可以借助 convert 命令將多張圖片組合為一張重復(fù)播放的 GIF 動圖:
$ convert -delay 20 -loop 0 *.png out.gif

其中 -delay 選項用于指定圖片切換的時間間隔圈浇,單位為毫秒寥掐。

參考文章

ImageMagick Tutorial
ImageMagick basics

拓展閱讀

Examples of ImageMagick Usage(很詳細(xì))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市磷蜀,隨后出現(xiàn)的幾起案子召耘,更是在濱河造成了極大的恐慌,老刑警劉巖蠕搜,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怎茫,死亡現(xiàn)場離奇詭異,居然都是意外死亡妓灌,警方通過查閱死者的電腦和手機轨蛤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虫埂,“玉大人祥山,你說我怎么就攤上這事〉舴” “怎么了缝呕?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斧散。 經(jīng)常有香客問我供常,道長,這世上最難降的妖魔是什么鸡捐? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任栈暇,我火速辦了婚禮,結(jié)果婚禮上箍镜,老公的妹妹穿的比我還像新娘源祈。我一直安慰自己,他們只是感情好色迂,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布香缺。 她就那樣靜靜地躺著,像睡著了一般歇僧。 火紅的嫁衣襯著肌膚如雪图张。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天诈悍,我揣著相機與錄音埂淮,去河邊找鬼。 笑死写隶,一個胖子當(dāng)著我的面吹牛倔撞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慕趴,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼痪蝇,長吁一口氣:“原來是場噩夢啊……” “哼鄙陡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起躏啰,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤趁矾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后给僵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毫捣,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年帝际,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔓同。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹲诀,死狀恐怖斑粱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脯爪,我是刑警寧澤则北,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站痕慢,受9級特大地震影響尚揣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掖举,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一快骗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拇泛,春花似錦滨巴、人聲如沸思灌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泰偿。三九已至熄守,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耗跛,已是汗流浹背裕照。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留调塌,地道東北人晋南。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像羔砾,于是被迫代替她去往敵國和親负间。 傳聞我的和親對象是個殘疾皇子偶妖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容