ImageMagick 之命令行處理

## ImageMagick 命令行處理

ImageMagic命令行能像這樣簡單:

convert image.jpg image.png

或者它很復雜,就像下面的:

convert label.gif +matte \ 
\( +clone -shade 110x90 -normalize -negate +clone -compose Plus -composite \) \
\( -clone 0 -shade 110x50 -normalize -channel BG -fx 0 +channel -matte \) \
-delete 0 +swap -compose Multiply -composite button.gif

不用知道太多ImageMagick命令行棚放,你可能認為上面的第一個命令是轉換一個JPEG格式的圖像為Png格式。然而昌执,很少有人知道第二個命令萄窜,它更加復雜,用豐富的質感和模擬的深度使一個色彩單調的二位符號變成三維

[命令格式快速瀏覽:上面第二個命令那個太長了循榆,以至于跨越了好幾行匙姜,所以我們?yōu)榱饲逦迦敕葱本€()來格式化命令行冯痢。反斜線在unix中是續(xù)行符。在windows shell中框杜,使用^符號作為續(xù)行符浦楣。在這些網頁中,我們使用Unix風格咪辱,就像上面的振劳。然而,有時油狂,如果你的瀏覽器窗口太小了历恐,命令行被瀏覽器隱藏了,但是在空白處的命令行专筷,依然會被作為一行打印弱贼。續(xù)行符不需要被輸入了。上面使用反斜線轉義的的圓括號在Windows中不轉義磷蛹。在Unix和Windows之間有一些其他的不同之處(包括引號標記吮旅,比如),但是我們將在它們出現時再討論味咳。]

此處我們以一個帶有陰影的圓柱展示一個任務的完成百分比:

考慮到示意圖的復雜性庇勃,你可能為它能用單一的命令行完成感到吃驚:

convert -size 320x90 canvas:none -stroke snow4 -size 1x90 -tile gradient:white-snow4 \
  -draw 'roundrectangle 16, 5, 304, 85 20,40' +tile -fill snow \
  -draw 'roundrectangle 264, 5, 304, 85  20,40' -tile gradient:chartreuse-green \
  -draw 'roundrectangle 16,  5, 180, 85  20,40' -tile gradient:chartreuse1-chartreuse3 \
  -draw 'roundrectangle 140, 5, 180, 85  20,40' +tile -fill none \
  -draw 'roundrectangle 264, 5, 304, 85 20,40' -strokewidth 2 \
  -draw 'roundrectangle 16, 5, 304, 85 20,40' \( +clone -background snow4 \
  -shadow 80x3+3+3 \) +swap -background none -layers merge \( +size -font Helvetica \
  -pointsize 90 -strokewidth 1 -fill red label:'50 %' -trim +repage \( +clone \
  -background firebrick3 -shadow 80x3+3+3 \) +swap -background none -layers merge \) \
  -insert 0 -gravity center -append -background white -gravity center -extent 320x200 \
  cylinder_shaded.png

在下一節(jié)我們仔細分析ImageMagick命令行的結構。如果順利的話槽驶,在仔細閱讀和較好地理解命令行如何作用時责嚷,你應該能不借助有時候令人畏縮的程序接口完成復雜的圖像處理任務。

當使用ImageMagick命令行時閱讀《ImageMagick使用案例》得到額外幫助

命令行的結構

ImageMagick命令行包括

一個或多個要求的輸入文件名.零個掂铐,一個或多個圖像設置.零個罕拂,一個或多個圖像操作.零個,一個或多個圖像序列操作符
零個或一個輸出圖像文件名(required by convert, composite, montage, compare, import, conjure)

你可以在下面的第二節(jié)找到命令行每一部分的詳細說明

Input Filename 輸入文件名

ImageMagick擴展了輸入文件名的概念堡纬,包括:

  • 文件名通配符
  • 一個明確的圖片格式
  • 使用內建的圖像和圖案
  • 標準輸入聂受,標準輸出,和文件描述符
  • 從圖像中選擇特定幀
  • 圖像選區(qū)
  • 使一列圖像調整大小
  • 剪切一列圖像
  • 使用文件名引用

下面幾段解釋這些擴展

Filename Globbing 文件名通配符

在unix shell中烤镐,特定的字符諸如(*)和問號(蛋济?)根據模式匹配自動生成文件名清單。這種特征就是廣為人知的通配炮叶。ImageMagick為系統(tǒng)支持文件名通配碗旅,比如Windows渡处,不是天生就支持它。舉個例子祟辟,假設你想轉換你當前目錄中的1.jpg, 2.jpg, 3.jpg, 4.jpg, and 5.jpg為一個GIF動畫医瘫。你可以方便地針對所以JPEG文件用此命令:

convert *.jpg images.gif

Explicit Image Format明確圖像格式

圖像存儲在數量極多的圖像格式中包括為人熟知的JPEG,PNG旧困,TIFF和其他格式醇份。ImageMagick在讀入和處理圖像前一定要知道圖像的格式。很多格式在圖像中有一個能唯一識別該格式的簽名吼具。如果沒有僚纷,ImageMagick使用文件擴展名來決定圖像格式。例如拗盒,image.jpg 或image.JPG告訴ImageMagick正在讀取的圖像是JPEG格式怖竭。

在某些情況下圖像可能沒有包含簽名 and /or 文件名不能識別圖像格式。在這些情況下陡蝇,必須指定明確的格式痊臭。例如,假設我們有一個圖像叫做image并且含有raw登夫,red广匙,和blue 色飽和度值。ImageMagick沒有辦法自動確定此圖像的格式悼嫉,所以我們明確地設定一種:

convert –size 640x480 –depth 8 rgb:image image.png

Built-in Images and Patterns內置圖像和圖案

ImageMagick有很多內置圖像和圖案艇潭。使用checkerboard 圖案,例如戏蔑,使用:

convert -size 640x480 pattern:checkerboard checkerboard.png

STDIN.STDOUT,and file descriptors 標準輸入蹋凝,標準輸出和文件描述符

Unix和Windows允許一條命令的輸出通過管道成為另一條命令的輸入。ImageMagick允許從標準流 STDIN(標準輸入)和STDOUT (標準輸出)讀寫圖像數據总棵。分別地鳍寂,使用一個虛擬文件名 - . 在這個例子中我們傳送convert命令的輸出到display程序。

convert logo: gif:- | display gif:-

前面的例子中第二個明確的格式”gif”是可選的情龄。GIF 圖像在圖像中有一個唯一的簽名所以ImageMagick的display命令能容易地識別出格式為GIF迄汛。convert 程序也用這種方法接受標準輸入:

convert rose: gif:- | convert - -size “200%” bigrose.jpg

其他管道可通過它們的文件描述符訪問(版本 6.4.9-3)。文件描述符0,1和2分別保留地作為標準流 STDIN骤视,STDOUT鞍爱,和STDERR,但是與文件描述符數字 N>2關聯的管道可以使用假名fd:N訪問专酗。(假名fd:0 和 fd:1 可被用作STDIN和STDOUT.)下一個例子展示了如何附加從描述符3和4傳過來的圖像數據并且把結果導入有文件描述符5的文件里睹逃。

convert fd:3 fd:4 –append fd:5

當需要時,可以給出先前提到的明確的圖像格式,就像下面的:

convert gif:fd:3 jpg:fd:4 –append tif:fd:5

Selecting Frames 選擇幀

一些圖像格式包含不止一個圖像幀沉填×屏ィ或許你只想要第一幅圖像∫砟郑或者最后一幅斑鼻,或中間的一些圖像。你可以指定將讀取哪個圖像幀通過在文件名后加上用括號包圍的幀范圍猎荠。此處我們的圖像(一個GIF動畫)包含多個幀坚弱,但我們只想要第一個:

convert 'images.gif[0]' images.png

[Unix一般會解釋括號所以上面我們用引號引起文件名。在Windows shell 括號不會被解釋但是使用引號也無妨关摇。然而史汗,在很多情況下,關于Unix和Windows單引號和雙引號的角色反轉過來拒垃,所以Windows用戶應在我們顯示單引號時使用雙引號,反過來也一樣瓷蛙。]

你可以從帶有幀值域的序列中讀取多張圖像悼瓮。例如,你可以從一列圖像中提取前四幀:

convert 'images.gif[0-3]' images..mng

完全地艰猬,你可以不按順序地從一列圖像中讀取多張圖像横堡。下一條命令獲取序列中的第三副圖像,接著是第二幅冠桃,然后是第四副:

convert 'images.gif[3,2,4]' images..mng

注意到最后兩條命令命贴,生成單一圖像。輸出在這種情況下食听,圖像格式是MNG胸蛛,是一個多幀文件因為MNG格式支持多幀。如果輸出格式為JPG樱报,只能支持單一幀葬项,輸出將會是單獨幀組成。下面是更多關于此的迹蛤,在 Output Filename一節(jié)民珍。

Selecting an Image Region 圖像選區(qū)

Raw 圖像是一組不含額外數據諸如寬,高盗飒,或者圖像簽名的顏色密度嚷量。對于Raw圖像格式,你必須指定圖像寬和高并且指定讀取圖像的區(qū)域范圍逆趣。在我們的例子中蝶溶,圖像是raw 8-bit RGB 格式,并且是6000像素寬汗贫,4000像素高身坐。然而秸脱,我們只要靠近圖像中心600x400的區(qū)域:

convert –size 6000x4000 –depth 8 \
'rgb:image[600x400+1900+2900]' image.jpg

你可以使用-extract選項達到同樣結果:

convert -size 6000x4000 -depth 8 \
-extract 600x400+1900+2900 rgb:image image.jpg

Inline Image Resize 調整一列圖像的大小

有時候讀取圖像時調整它們的大小很方便。假設你有上百個大的JPEG圖像部蛇,你想把它們轉換成一列PNG縮略圖:

convert '*.jpg' –resize 120x120 thumbnaild.png

此處所有圖像被讀取隨后被調整大小摊唇。逐個讀取每個圖像時更快,占用資源更集中:

convert '*.jpg[120x120]' thumbnail.png

Inline Image Crop 剪切一列圖像

有時候讀取圖像時剪切它們很方便涯鲁。假設你有上百個大的JPEG圖像巷查,你想把它們轉換成一列PNG縮略圖:

convert '*.jpg' -crop 120x120+10+5 thumbnaild.png

此處所有圖像被讀取隨后被調整大小。逐個讀取每個圖像時更快抹腿,占用資源更集中:

convert '*.jpg[120x120+10+5]' thumbnaild.png

Filename References 文件名引用

有兩種方法使用文件名去引用其他圖像文件名岛请。第一個就是使用'@',它從指定文件讀取用空白隔開的圖像文件。假定文件myimages.txt包含一個文件名清單警绩,像這樣:

  frame001.jpg
  frame002.jpg
  frame003.jpg 

我們會有這樣的命令:

convert @myimages..txt mymovie.gif

讀取圖像 frame001.jpg, frame002.jpg, and frame003.jpg并把它們轉換成GIF圖像序列

如果圖像路徑包含一個或多個空格崇败,用引號包圍路徑:

'my title.jpg'

有些ImageMagick命令行選項會超出你的命令行解釋器的能力。Windows肩祥,例如后室,限制命令行為8192個字符。如果混狠,例如岸霹,你有一個帶有多邊形箭頭的draw選項超過了命令行長度限制,把draw 選項放入一個文件并用@符號引用此文件(e.g.@mypoly.txt)

另一種引用其他圖像文件的方法是通過在帶有值域的文件名中嵌入格式字符将饺」北埽考慮文件名image-%d.jpg[1-5]. 命令是:

convert image-%d.jpg[1-5]

讓ImageMagick嘗試讀取帶有這些文件名的圖像:

  image-1.jpg
  image-2.jpg
  image-3.jpg
  image-4.jpg
  image-5.jpg

ImageSetting

圖像設置一直存留當它出現在命令行上時并且可能影響隨后的處理比如讀取圖像,一個圖像操作符予弧,或當寫如圖像占位符時刮吧。圖像設置保持作用直到被重置或命令行終止。圖像設置包括:

?adjoin  ? ?affine  ? ?alpha  ? ?antialias  ? ?authenticate  ? ?background  ? ?bias  ? ?black?point?compensation  ? ?blue?primary  ? ?bordercolor  ? ?caption  ? ?channel  ? ?comment  ? ?compress  ? ?debug  ? ?define  ? ?delay  ? ?density  ? ?depth  ? ?direction  ? ?display  ? ?dispose  ? ?dither  ? ?encoding  ? ?endian  ? ?extract  ? ?family  ? ?fill  ? ?filter  ? ?font  ? ?format  ? ?fuzz  ? ?geometry  ? ?gravity  ? ?green?primary  ? ?interlace  ? ?intent  ? ?interpolate  ? ?label  ? ?limit  ? ?linewidth  ? ?log  ? ?loop  ? ?mask  ? ?mattecolor  ? ?monitor  ? ?orient  ? ?page  ? ?pointsize  ? ?preview  ? ?quality  ? ?quiet  ? ?red?primary  ? ?region  ? ?render  ? ?repage  ? ?sampling?factor  ? ?scene  ? ?seed  ? ?size  ? ?stretch  ? ?stroke  ? ?strokewidth  ? ?style  ? ?texture  ? ?tile  ? ?transparent?color  ? ?treedepth  ? ?type  ? ?undercolor  ? ?units  ? ?verbose  ? ?virtual?pixel  ? ?weight

在此例中掖蛤,-channel 應用到每幅圖像上皇筛,因此,就如我們提到的坠七,設置會存留:

convert –channel RGB wand.png wizard.png images.png

ImageMagick 命令行處理

ImageMagic命令行能像這樣簡單:

convert image.jpg image.png

或者它很復雜水醋,就像下面的:

convert label.gif +matte \ 
\( +clone -shade 110x90 -normalize -negate +clone -compose Plus -composite \) \
\( -clone 0 -shade 110x50 -normalize -channel BG -fx 0 +channel -matte \) \
-delete 0 +swap -compose Multiply -composite button.gif

不用知道太多ImageMagick命令行,你可能認為上面的第一個命令是轉換一個JPEG格式的圖像為Png格式彪置。然而拄踪,很少有人知道第二個命令,它更加復雜拳魁,用豐富的質感和模擬的深度使一個色彩單調的二位符號變成三維

[命令格式快速瀏覽:上面第二個命令那個太長了惶桐,以至于跨越了好幾行,所以我們?yōu)榱饲逦迦敕葱本€()來格式化命令行姚糊。反斜線在unix中是續(xù)行符贿衍。在windows shell中,使用^符號作為續(xù)行符救恨。在這些網頁中贸辈,我們使用Unix風格,就像上面的肠槽。然而擎淤,有時,如果你的瀏覽器窗口太小了秸仙,命令行被瀏覽器隱藏了嘴拢,但是在空白處的命令行,依然會被作為一行打印寂纪。續(xù)行符不需要被輸入了席吴。上面使用反斜線轉義的的圓括號在Windows中不轉義。在Unix和Windows之間有一些其他的不同之處(包括引號標記捞蛋,比如)抢腐,但是我們將在它們出現時再討論。]

此處我們以一個帶有陰影的圓柱展示一個任務的完成百分比:

考慮到示意圖的復雜性襟交,你可能為它能用單一的命令行完成感到吃驚:

convert -size 320x90 canvas:none -stroke snow4 -size 1x90 -tile gradient:white-snow4 \
  -draw 'roundrectangle 16, 5, 304, 85 20,40' +tile -fill snow \
  -draw 'roundrectangle 264, 5, 304, 85  20,40' -tile gradient:chartreuse-green \
  -draw 'roundrectangle 16,  5, 180, 85  20,40' -tile gradient:chartreuse1-chartreuse3 \
  -draw 'roundrectangle 140, 5, 180, 85  20,40' +tile -fill none \
  -draw 'roundrectangle 264, 5, 304, 85 20,40' -strokewidth 2 \
  -draw 'roundrectangle 16, 5, 304, 85 20,40' \( +clone -background snow4 \
  -shadow 80x3+3+3 \) +swap -background none -layers merge \( +size -font Helvetica \
  -pointsize 90 -strokewidth 1 -fill red label:'50 %' -trim +repage \( +clone \
  -background firebrick3 -shadow 80x3+3+3 \) +swap -background none -layers merge \) \
  -insert 0 -gravity center -append -background white -gravity center -extent 320x200 \
  cylinder_shaded.png

在下一節(jié)我們仔細分析ImageMagick命令行的結構。如果順利的話伤靠,在仔細閱讀和較好地理解命令行如何作用時捣域,你應該能不借助有時候令人畏縮的程序接口完成復雜的圖像處理任務。

當使用ImageMagick命令行時閱讀《ImageMagick使用案例》得到額外幫助

命令行的結構

ImageMagick命令行包括

  • 一個或多個要求的輸入文件名.
  • 零個宴合,一個或多個圖像設置.
  • 零個焕梅,一個或多個圖像操作.
  • 零個,一個或多個圖像序列操作符
  • 零個或一個輸出圖像文件名(required by convert, composite, montage, compare, import, conjure)

你可以在下面的第二節(jié)找到命令行每一部分的詳細說明

Input Filename 輸入文件名

ImageMagick擴展了輸入文件名的概念卦洽,包括:

  • ·文件名通配符
  • ·一個明確的圖片格式
  • ·使用內建的圖像和圖案
  • ·標準輸入贞言,標準輸出,和文件描述符
  • ·從圖像中選擇特定幀
  • ·圖像選區(qū)
  • ·使一列圖像調整大小
  • ·剪切一列圖像
  • ·使用文件名引用

下面幾段解釋這些擴展

Filename Globbing 文件名通配符

在unix shell中阀蒂,特定的字符諸如(*)和問號(该窗?)根據模式匹配自動生成文件名清單。這種特征就是廣為人知的通配蚤霞。ImageMagick為系統(tǒng)支持文件名通配酗失,比如Windows,不是天生就支持它昧绣。舉個例子规肴,假設你想轉換你當前目錄中的1.jpg, 2.jpg, 3.jpg, 4.jpg, and 5.jpg為一個GIF動畫。你可以方便地針對所以JPEG文件用此命令:

convert *.jpg images.gif

Explicit Image Format明確圖像格式

圖像存儲在數量極多的圖像格式中包括為人熟知的JPEG,PNG拖刃,TIFF和其他格式删壮。ImageMagick在讀入和處理圖像前一定要知道圖像的格式。很多格式在圖像中有一個能唯一識別該格式的簽名兑牡。如果沒有央碟,ImageMagick使用文件擴展名來決定圖像格式。例如发绢,image.jpg 或image.JPG告訴ImageMagick正在讀取的圖像是JPEG格式硬耍。

在某些情況下圖像可能沒有包含簽名 and /or 文件名不能識別圖像格式。在這些情況下边酒,必須指定明確的格式经柴。例如,假設我們有一個圖像叫做image并且含有raw墩朦,red坯认,和blue 色飽和度值。ImageMagick沒有辦法自動確定此圖像的格式氓涣,所以我們明確地設定一種:

convert –size 640x480 –depth 8 rgb:image image.png

Built-in Images and Patterns內置圖像和圖案

ImageMagick有很多內置圖像和圖案牛哺。使用checkerboard 圖案,例如劳吠,使用:

convert -size 640x480 pattern:checkerboard checkerboard.png

STDIN.STDOUT,and file descriptors 標準輸入引润,標準輸出和文件描述符

Unix和Windows允許一條命令的輸出通過管道成為另一條命令的輸入。ImageMagick允許從標準流 STDIN(標準輸入)和STDOUT (標準輸出)讀寫圖像數據痒玩。分別地淳附,使用一個虛擬文件名 - . 在這個例子中我們傳送convert命令的輸出到display程序。

convert logo: gif:- | display gif:-

前面的例子中第二個明確的格式”gif”是可選的蠢古。GIF 圖像在圖像中有一個唯一的簽名所以ImageMagick的display命令能容易地識別出格式為GIF奴曙。convert 程序也用這種方法接受標準輸入:

convert rose: gif:- | convert - -size “200%” bigrose.jpg

其他管道可通過它們的文件描述符訪問(版本 6.4.9-3)。文件描述符0,1和2分別保留地作為標準流 STDIN草讶,STDOUT洽糟,和STDERR,但是與文件描述符數字 N>2關聯的管道可以使用假名fd:N訪問堕战。(假名fd:0 和 fd:1 可被用作STDIN和STDOUT.)下一個例子展示了如何附加從描述符3和4傳過來的圖像數據并且把結果導入有文件描述符5的文件里坤溃。

convert fd:3 fd:4 –append fd:5

當需要時,可以給出先前提到的明確的圖像格式嘱丢,就像下面的:

convert gif:fd:3 jpg:fd:4 –append tif:fd:5

Selecting Frames 選擇幀

一些圖像格式包含不止一個圖像幀浇雹。或許你只想要第一幅圖像屿讽≌蚜椋或者最后一幅吠裆,或中間的一些圖像。你可以指定將讀取哪個圖像幀通過在文件名后加上用括號包圍的幀范圍烂完。此處我們的圖像(一個GIF動畫)包含多個幀试疙,但我們只想要第一個:

convert 'images.gif[0]' images.png

[Unix一般會解釋括號所以上面我們用引號引起文件名。在Windows shell 括號不會被解釋但是使用引號也無妨抠蚣。然而祝旷,在很多情況下,關于Unix和Windows單引號和雙引號的角色反轉過來嘶窄,所以Windows用戶應在我們顯示單引號時使用雙引號怀跛,反過來也一樣。]

你可以從帶有幀值域的序列中讀取多張圖像柄冲。例如吻谋,你可以從一列圖像中提取前四幀:

convert 'images.gif[0-3]' images..mng

完全地,你可以不按順序地從一列圖像中讀取多張圖像现横。下一條命令獲取序列中的第三副圖像漓拾,接著是第二幅,然后是第四副:

convert 'images.gif[3,2,4]' images..mng

注意到最后兩條命令戒祠,生成單一圖像骇两。輸出在這種情況下,圖像格式是MNG姜盈,是一個多幀文件因為MNG格式支持多幀低千。如果輸出格式為JPG,只能支持單一幀馏颂,輸出將會是單獨幀組成示血。下面是更多關于此的,在 Output Filename一節(jié)饱亮。

Selecting an Image Region 圖像選區(qū)

Raw 圖像是一組不含額外數據諸如寬,高舍沙,或者圖像簽名的顏色密度近上。對于Raw圖像格式畏鼓,你必須指定圖像寬和高并且指定讀取圖像的區(qū)域范圍沮脖。在我們的例子中,圖像是raw 8-bit RGB 格式绍在,并且是6000像素寬感帅,4000像素高斗锭。然而,我們只要靠近圖像中心600x400的區(qū)域:

convert –size 6000x4000 –depth 8 \
'rgb:image[600x400+1900+2900]' image.jpg

你可以使用-extract選項達到同樣結果:

convert -size 6000x4000 -depth 8 \
-extract 600x400+1900+2900 rgb:image image.jpg

Inline Image Resize 調整一列圖像的大小

有時候讀取圖像時調整它們的大小很方便失球。假設你有上百個大的JPEG圖像岖是,你想把它們轉換成一列PNG縮略圖:

convert '*.jpg' –resize 120x120 thumbnaild.png

此處所有圖像被讀取隨后被調整大小帮毁。逐個讀取每個圖像時更快,占用資源更集中:

convert '*.jpg[120x120]' thumbnail.png

Inline Image Crop 剪切一列圖像

有時候讀取圖像時剪切它們很方便豺撑。假設你有上百個大的JPEG圖像烈疚,你想把它們轉換成一列PNG縮略圖:

convert '*.jpg' -crop 120x120+10+5 thumbnaild.png

此處所有圖像被讀取隨后被調整大小。逐個讀取每個圖像時更快聪轿,占用資源更集中:

convert '*.jpg[120x120+10+5]' thumbnaild.png

Filename References 文件名引用

有兩種方法使用文件名去引用其他圖像文件名爷肝。第一個就是使用'@',它從指定文件讀取用空白隔開的圖像文件。假定文件myimages.txt包含一個文件名清單陆错,像這樣:

  frame001.jpg
  frame002.jpg
  frame003.jpg 

我們會有這樣的命令:

convert @myimages..txt mymovie.gif

讀取圖像frame001.jpg, frame002.jpg, and frame003.jpg并把它們轉換成GIF圖像序列

如果圖像路徑包含一個或多個空格灯抛,用引號包圍路徑:

'my title.jpg'

有些ImageMagick命令行選項會超出你的命令行解釋器的能力。Windows音瓷,例如对嚼,限制命令行為8192個字符。如果外莲,例如猪半,你有一個帶有多邊形箭頭的draw選項超過了命令行長度限制,把draw 選項放入一個文件并用@符號引用此文件(e.g.@mypoly.txt)

另一種引用其他圖像文件的方法是通過在帶有值域的文件名中嵌入格式字符偷线∧ト罚考慮文件名image-%d.jpg[1-5]. 命令是:

convert image-%d.jpg[1-5]

讓ImageMagick嘗試讀取帶有這些文件名的圖像:

  image-1.jpg
  image-2.jpg
  image-3.jpg
  image-4.jpg
  image-5.jpg

ImageSetting

圖像設置一直存留當它出現在命令行上時并且可能影響隨后的處理比如讀取圖像,一個圖像操作符声邦,或當寫如圖像占位符時乏奥。圖像設置保持作用直到被重置或命令行終止。圖像設置包括:

?adjoin  ? ?affine  ? ?alpha  ? ?antialias  ? ?authenticate  ? ?background  ? ?bias  ? ?black?point?compensation  ? ?blue?primary  ? ?bordercolor  ? ?caption  ? ?channel  ? ?comment  ? ?compress  ? ?debug  ? ?define  ? ?delay  ? ?density  ? ?depth  ? ?direction  ? ?display  ? ?dispose  ? ?dither  ? ?encoding  ? ?endian  ? ?extract  ? ?family  ? ?fill  ? ?filter  ? ?font  ? ?format  ? ?fuzz  ? ?geometry  ? ?gravity  ? ?green?primary  ? ?interlace  ? ?intent  ? ?interpolate  ? ?label  ? ?limit  ? ?linewidth  ? ?log  ? ?loop  ? ?mask  ? ?mattecolor  ? ?monitor  ? ?orient  ? ?page  ? ?pointsize  ? ?preview  ? ?quality  ? ?quiet  ? ?red?primary  ? ?region  ? ?render  ? ?repage  ? ?sampling?factor  ? ?scene  ? ?seed  ? ?size  ? ?stretch  ? ?stroke  ? ?strokewidth  ? ?style  ? ?texture  ? ?tile  ? ?transparent?color  ? ?treedepth  ? ?type  ? ?undercolor  ? ?units  ? ?verbose  ? ?virtual?pixel  ? ?weight

在此例中亥曹,-channel 應用到每幅圖像上邓了,因此,就如我們提到的媳瞪,設置會存留:

convert –channel RGB wand.png wizard.png images.png

Image Operator 圖像操作符

圖像操作符不同于圖像設置骗炉,它立即對圖像產生作用當它出現在命令行上時。一個圖像操作符是任意的非列出的圖像設置或圖像序列操作符命令行選項蛇受。不像圖像設置句葵,存留到命令行終止,圖像操作符應用到一幅圖像后就消失了兢仰。圖像操作符包括:

?annotate  ? ?black?threshold  ? ?blur  ? ?border  ? ?charcoal  ? ?chop  ? ?clip  ? ?clip?path  ? ?clip?mask  ? ?colors  ? ?colorize  ? ?colorspace  ? ?compose  ? ?contrast  ? ?convolve  ? ?crop  ? ?cycle  ? ?despeckle  ? ?draw  ? ?edge  ? ?emboss  ? ?enhance  ? ?equalize  ? ?evaluate  ? ?extent  ? ?flip  ? ?flop  ? ?floodfill  ? ?frame  ? ?gamma  ? ?gaussian?blur  ? ?implode  ? ?lat  ? ?level  ? ?map  ? ?median  ? ?modulate  ? ?monochrome  ? ?negate  ? ?noise  ? ?normalize  ? ?opaque  ? ?ordered?dither  ? ?paint  ? ?posterize  ? ?raise  ? ?profile  ? ?radial?blur  ? ?raise  ? ?random?threshold  ? ?resample  ? ?resize  ? ?roll  ? ?rotate  ? ?sample  ? ?scale  ? ?sepia?tone  ? ?segment  ? ?shade  ? ?shadow  ? ?sharpen  ? ?shave  ? ?shear  ? ?sigmoidal?contrast  ? ?solarize  ? ?splice  ? ?spread  ? ?strip  ? ?swirl  ? ?threshold  ? ?transparent  ? ?thumbnail  ? ?tint  ? ?transform  ? ?trim  ? ?unsharp  ? ?version  ? ?wave  ? ?white?point  ? ?white?threshold

在這個例子中乍丈,-negate 使wand圖像負片而不是wizard:

convert wand.png –negate wizard.png images.png

Image Sequence Operator 圖像序列操作符

圖像序列操作符不同于圖像設置,它立即影響圖像序列當它出現在命令行上時把将。從這些圖像操作符中選擇:

?append  ? ?affinity  ? ?average  ? ?clut  ? ?coalesce  ? ?combine  ? ?composite  ? ?crop  ? ?debug  ? ?deconstruct  ? ?delete  ? ?evaluate?seqence  ? ?fft  ? ?flatten  ? ?fx  ? ?hald?clut  ? ?ift  ? ?identify  ? ?insert  ? ?layers  ? ?limit  ? ?map  ? ?maximum  ? ?minimum  ? ?morph  ? ?mosaic  ? ?optimize  ? ?print  ? ?process  ? ?quiet  ? ?separate  ? ?swap  ? ?write

Image Geometry 幾何圖像

許多命令行選項都有一個geometry 參數指定這樣的東西如要求圖像的寬和高和其他尺寸的量轻专。因為用戶想得到各種各樣的圖像的尺寸,大小察蹲,位置的結果(并且因為ImageMagick支持它們)请垛,geometry 參數能出現多種形式催训。我們在這一節(jié)描述他們中的多數。

帶有geometry 參數的圖像選項和設置包括如下叼屠。記住從語法上分析有些參數略有不同瞳腌。更多細節(jié),請分別查看option或setting的說明

?adaptive?resize  ? ?border  ? ?borderwidth  ? ?chop  ? ?crop  ? ?density  ? ?extent  ? ?extract  ? ?frame  ? ?geometry  ? ?iconGeometry  ? ?liquid?rescale  ? ?page  ? ?region  ? ?repage  ? ?resize  ? ?sample  ? ?scale  ? ?shave  ? ?splice  ? ?thumbnail  ? ?window

Geometry 參數可能是下表列出的任何形式镜雨。這些將在下表分段詳細描述嫂侍。通常的形式是size[offset],即size是必須的,offset是可選的荚坞。特殊場合下挑宠,[size]offset也可以。在任何情況下gemetry參數中都不允許空格出現颓影。

Size                一般描述(事實上行為因不同的選項和設置變化)
Scale%              高和寬都按指定的百分比測量
Scale-x%xscale-y%   高和寬分別都按指定百分比測量(只需要一個%號)
Width               給定寬度各淀,高度會自動選擇以保持寬高比
xheight             給定高度,寬度自動選擇以保持寬高比
widthxheight        給定寬和高的最大值诡挂,保持寬高比
widthxheight^       給定寬和高的最小值碎浇,保持寬高比
widthxheight!       Width and height emphatically given, original aspect ratio ignored.
widthxheight>       Change as per widthxheight but only if an image dimension exceeds a specified dimension.
Widthxheight<       僅當寬和高都超過指定尺寸時改變尺寸
area@               調整圖像大小到指定像素面積。保持寬高比璃俗。
{size}{offset}      指定偏移量(默認為+0+0).下面奴璃,{size}指的是上面出現的任何形式。
{size}{+-}x{+-}y    水平和垂直偏移量x和y城豁,用像素指定苟穆。兩者都需要標記。偏移量受-gravity 設置影響唱星。偏移量不受 %或其他size操作符影響雳旅。

對圖像的基本調整;操作符%,^,和!

此處间聊,就是下面攒盈,是一些簡單的geometry的例子展示它作為-resize的參數是如何使用的。我們將使用內置圖像logo: 作為輸入圖像哎榴。這個不錯的圖像有640像素寬型豁,480像素高。我們說他的尺寸是640x480叹话。當我們給出一個圖像的尺寸時偷遗,寬度(水平尺寸)總是在高度(垂直尺寸)之前墩瞳。當我們談到圖像的坐標或偏移量時這會是對的驼壶,它總是x值后跟著y值。你就想想高中代數課程和xy水平坐標系(Well喉酌,幾乎热凹,我們的y軸總是向下的1么)

convert logo: -resize '200%'     bigWiz.png
convert logo: -resize '200x50%'  longShortWiz.png
convert logo: -resize '100x200'  notThinWiz.png
convert logo: -resize '100x200^' biggerNotThinWiz.png
convert logo: -resize '100x200!' dochThinWiz.png

4個命令中的第一個很簡單-------它從各個方向把輸入圖像的寬和高都拉伸200%;它用兩個因子放大整個圖像般妙。第二條命令為每個方向指定不同的百分比纪铺,把圖像的寬拉伸200%并且擠壓高度為50%。結果圖(此例中)尺寸為1280x240碟渺。注意到%號不需要重復一次鲜锚;下面的與它相同:

200x50%, 200%x50苫拍,200%x50%

默認的芜繁,geometry參數給定的寬和高是最大值除非指定了一個百分比。那就是绒极,圖像擴大或縮小到指定的寬高值而保持圖像的寬高比(它的高和寬的比率)骏令。例如,上面的第三條命令“試圖”設置圖像尺寸為100x200垄提。假設逐步收縮原圖像(它是640x480)榔袋,保持它的寬高比始終不變,直到它達到100x200的矩形铡俐。因為圖像難以置信的長凰兑,當它的寬度縮為100像素時。為了保持寬高比高蜂,高度因此不得不變?yōu)椋?80/640)x100像素=75像素聪黎,所以最后尺寸為100x75

注意到在前面的例子中,至少有一個指定的尺寸會得到(在此情況下稿饰,寬度為100像素)結果圖在原圖范圍內調整適應.你可以引用操作符得到與之相反的結果露泊。就像上面的第四個命令侣姆。在那種情況下捺宗,當100x200作為參數時,再次昼牛,至少會得到一個尺寸贰健,但是這種情況下伶椿,結果圖可以緊含在原圖中游昼。此處geometry給出最小的值烘豌。在我們的例子中,高將會變?yōu)?00并且寬會被調整以保持寬高比标锄,變成(640x480)x200像素=267像素料皇。通過操作符,其中的一個尺寸會匹配所要求的大小逊脯,但是圖像很可能超出要求的尺寸以保持寬高比。(功能在IM 6.3.8-2是新的)

我們看到ImageMagick在保持圖像寬高比方面很出色匕争,防止你喜歡的圖像和照片失真。但是你可能真的想要尺寸變?yōu)?00x200扇住,因此拉伸圖像。在這種情況下女阀,僅僅告訴ImageMagick你真的想要(!)通過在geometry參數后附加一個感嘆號。這樣會強制使圖像變?yōu)槟阒付ǖ拇笮∮购埂K则遣眨绻阒付?00x200! ,圖像尺寸會恰恰變成100x200(給出一個小的兄裂,垂直的,狹長的Wizard)

限定寬畅涂,高和面積;操作符>,<和@

此有更多例子:

convert logo: -resize '100' wiz1.png
convert logo: -resize 'x200' wiz2.png
convert logo: -resize '100x200>' wiz3.png
convert logo: -resize '100x200<' wiz4.png

當只指定寬度時臊岸,就如上面的第一個例子,寬度就是所給值钟哥,高度選為能保持輸入圖像寬高比的值。類似的播演,如果只指定了高度,就如上面的第二個例子洲炊,高度被接受并且寬度被選擇保持寬高比玄叠。

除非其中之一的幾何規(guī)格超出圖像原來的寬和高才使用>改變圖像尺寸隧膘。除非圖像原來的尺寸超過幾何規(guī)格才用<調整圖像大小疹吃。在任一情況下艇肴,如果發(fā)生變化核畴,結果就像>或>操作符不存在一樣。所以冀宴,在上面的第三個例子中,我們指定了100x200> 并且原圖像大小是640x480古拴,所以圖像大小減小就如我們指定了100x200一樣紧帕。然而挺尾,上面第四個例子圖像大小將沒有變化丽柿。

最后涂召,使用@指定圖像的最大像素面積炎码,再次轮锥,與此同時保持圖像寬高比新娜。(像素只取整數值,所以一些近似值通常也有效)在下面的例子中,要求10000像素面積。結果圖文件尺寸是115x86,它有9890像素。

convert logo: -resize '@10000' wiz10000.png

關于引號的另一句話:在上面和下面所有的例子中某弦,我們用引號引起了gemotery 參數。在很多情況下這是可選的,但不總是。我們必須在使用<或>時用引號引起幾何規(guī)格以防這些字符被shell解釋為文件重定向符號蚁滋。在Windows操作系統(tǒng)上梢卸,戴陡、符號^需要在引號內开皿,否則會被忽略。為了安全月帝,或許應該保持把geometry 參數放在引號中的習慣嚷辅,就像我們這里一樣簿姨。

Geometry的偏移量

這是一些說明geometry參數中偏移量用法的例子。偏移量的一種典型用法就是結合 –region 選項簸搞。這個選項允許很多其他選項修改圖像中指定的矩形子區(qū)域的像素扁位。照此,需要給出哪個區(qū)域的寬和高趁俊,還有相對圖像的偏移量域仇,它是一對坐標,指明了該區(qū)域在整個更大圖像中的位置寺擂。下面暇务,在第一個例子中泼掠,我們指定一個區(qū)域大小為100x200,位置在xy-坐標 x=10,y=20.為了方便般卑,讓我們用慣常的代數記號(x,y)=(10,20).

convert logo: -region '100x200+10+20' –negate wizNeg1.png
convert logo: -region '100x200-10+20' -negate wizNeg2.png
convert logo: -gravity center -region '100x200-10+20' -negate wizNeg3.png

注意偏移量總需要+/-符號武鲁。偏移量實際上并非圖像中的位置;它的坐標必須加到其他位置蝠检。讓我們稱之為當前位置沐鼠。在上面的前兩個例子中,盡管叹谁,該位置為圖像的左上角饲梭,它的坐標為(0,0)(那是默認位置當沒有其他給出的指令改變它時)。上面第一個例子將100x200的矩形放到左上角坐標(10,20)處焰檩。

一個負的偏移量在很多情況下有意義憔涉。在上面的第二個例子中,偏移量是(-10,20),被指定為-10+20.在此情況下析苫,只有圖像中那個矩形位置的部分圖像成為負片兜叨。此處指定的geometry 為90x200+0+20與之相當。

在上面的第三個例子中衩侥,-gravity 設置在其他參數之前国旷,并且設置當前位置在圖像的正中心。在此情況下茫死,即在像素(320,240)處跪但,因為圖像大小為640x480。這意味著偏移量應用到那個位置峦萎,它因而移動位置了屡久,此時,到了(320-10,240+20)=(310,260).但是10x200區(qū)域本身受到 –gravity 設置的影響爱榔,所以被环,不是影響它的左上角,the region's own center (at (+50,+100) within it) is determined.因此详幽,100x200的矩形中心移動到了(310,260).現在左上角負片變成了(310-50,260-100)=(260,160).

圖像堆棧

在學校里筛欢,你的老師可能允許你在一張演草紙上演算問題然后把結果抄到試卷上。圖像堆棧與之相似妒潭。它允許你孤立地在一幅圖像或圖像序列上工作并隨后把結果導回命令行悴能。圖像堆棧用圓括號描述。圖像操作符僅影響當前堆棧中的圖像雳灾。例如漠酿,我們能限定圖像旋轉為wizard圖像像這樣:

convert wand.gif  \( wizard.gif –rotate 30  \)  +append  images.gif

再次注意括號被他們前面的反斜線轉義了。這在Unix上是必須的谎亩,此處圓括號是特殊的shell字符炒嘲。反斜線告訴shell不要解釋這些字符宇姚,而是直接傳遞給命令行執(zhí)行。在Windows下不需要轉義括號夫凸。每個括號(或者轉義的括號)兩邊都要有空格浑劳,就像上面的示例那樣。

除了已經討論過的圖像操作符夭拌,下面的圖像操作符在圖像堆棧中處理圖像更有用魔熏。

?clone  ? ?delete  ? ?insert  ? ?swap  ?

這些圖像操作符的參數是圖像序列的數字索引,從0開始鸽扁,為第一個圖像蒜绽,以此類推。然而桶现,如果你給出一個負的索引躲雅,圖像從最后開始索引(最后一個圖像算起)。即骡和,索引 -1 在當前圖像序列中是最后一幅圖像相赁。,-2是倒數第二個慰于,以此類推钮科。

輸出文件名

ImageMagick 擴展了輸出文件的概念,包括:

  • 一個明確的圖像格式
  • 寫到標準輸出
  • 文件名引用

在下面幾段中解釋其中的每一部分

明確的圖像格式

圖像存儲在數量極多的圖像格式中包括為人熟知的JPEG东囚,PNG跺嗽,TIFF和其他格式战授。ImageMagick在寫入圖像前一定要知道圖像的格式页藻。ImageMagick使用文件擴展名來決定圖像格式。例如植兰,image.jpg 或image.JPG告訴ImageMagick正在讀取的圖像是JPEG格式份帐。

在某些情況下文件名不能識別圖像格式。在這些情況下楣导,圖像寫入的格式就是它原來讀取的格式除非指定了明確的格式废境。例如,假設我們有一個圖像叫做image并且是raw筒繁,red噩凹,和blue 強烈格式:

convert image.jpg rgb:image

標準輸出:

Unix允許一個命令的輸出通過管道傳送到另一命令中。Imagemagick允許使用文件名 – 將一個命令傳給另一個命令毡咏。在此例子中我們將convert的輸出傳給程序display

convert logo: gif:- | display gif:-

此處明確的格式是可選的GIF圖像格式有一個簽名能唯一識別圖像所以ImageMagick能容易地識別格式為gif

文件名引用

使用嵌入的格式字符去些寫個按序排列的圖像清單驮宴。假設我們的輸出文件名是 image-%d.jpg 并且我們的圖像清單包含3個圖像。你可能期望圖像文件寫為:

image-0.jpg
image-1.jpg
image-2.jpg

或檢索圖像屬性去修改圖像文件名呕缭。例如堵泽,命令

convert rose: -set filename:area '%wx%h' \
'rose-%[filename:area].png'

用此文件名寫入圖像

rose-70x46.jpg

最后修己,轉換多個JPEG圖像為單獨的PDF頁,用:

convert *.jpg +adjoin page-%d.pdf
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末迎罗,一起剝皮案震驚了整個濱河市睬愤,隨后出現的幾起案子,更是在濱河造成了極大的恐慌纹安,老刑警劉巖尤辱,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異厢岂,居然都是意外死亡啥刻,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門咪笑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來可帽,“玉大人,你說我怎么就攤上這事窗怒∮掣” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵扬虚,是天一觀的道長努隙。 經常有香客問我,道長辜昵,這世上最難降的妖魔是什么荸镊? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮堪置,結果婚禮上躬存,老公的妹妹穿的比我還像新娘。我一直安慰自己舀锨,他們只是感情好岭洲,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坎匿,像睡著了一般盾剩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上替蔬,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天告私,我揣著相機與錄音,去河邊找鬼承桥。 笑死驻粟,一個胖子當著我的面吹牛,可吹牛的內容都是我干的快毛。 我是一名探鬼主播格嗅,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼番挺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了屯掖?” 一聲冷哼從身側響起玄柏,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贴铜,沒想到半個月后粪摘,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡绍坝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年徘意,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轩褐。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡椎咧,死狀恐怖,靈堂內的尸體忽然破棺而出把介,到底是詐尸還是另有隱情勤讽,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布拗踢,位于F島的核電站脚牍,受9級特大地震影響,放射性物質發(fā)生泄漏巢墅。R本人自食惡果不足惜诸狭,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望君纫。 院中可真熱鬧驯遇,春花似錦、人聲如沸庵芭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽双吆。三九已至,卻和暖如春会前,著一層夾襖步出監(jiān)牢的瞬間好乐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工瓦宜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蔚万,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓临庇,卻偏偏與公主長得像反璃,于是被迫代替她去往敵國和親昵慌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容