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格式。然而,很少有人知道第二個命令,它更加復雜,用豐富的質感和模擬的深度使一個色彩單調的二位符號變成三維

[命令格式快速瀏覽:上面第二個命令那個太長了,以至于跨越了好幾行,所以我們為了清晰,插入反斜線()來格式化命令行。反斜線在unix中是續行符。在windows shell中,使用^符號作為續行符。在這些網頁中,我們使用Unix風格,就像上面的。然而,有時,如果你的瀏覽器窗口太小了,命令行被瀏覽器隱藏了,但是在空白處的命令行,依然會被作為一行打印。續行符不需要被輸入了。上面使用反斜線轉義的的圓括號在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

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

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

命令行的結構

ImageMagick命令行包括

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

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

Input Filename 輸入文件名

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

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

下面幾段解釋這些擴展

Filename Globbing 文件名通配符

在unix shell中,特定的字符諸如(*)和問號(?)根據模式匹配自動生成文件名清單。這種特征就是廣為人知的通配。ImageMagick為系統支持文件名通配,比如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 選擇幀

一些圖像格式包含不止一個圖像幀?;蛟S你只想要第一幅圖像。或者最后一幅,或中間的一些圖像。你可以指定將讀取哪個圖像幀通過在文件名后加上用括號包圍的幀范圍。此處我們的圖像(一個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一節。

Selecting an Image Region 圖像選區

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

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格式。然而,很少有人知道第二個命令,它更加復雜,用豐富的質感和模擬的深度使一個色彩單調的二位符號變成三維

[命令格式快速瀏覽:上面第二個命令那個太長了,以至于跨越了好幾行,所以我們為了清晰,插入反斜線()來格式化命令行。反斜線在unix中是續行符。在windows shell中,使用^符號作為續行符。在這些網頁中,我們使用Unix風格,就像上面的。然而,有時,如果你的瀏覽器窗口太小了,命令行被瀏覽器隱藏了,但是在空白處的命令行,依然會被作為一行打印。續行符不需要被輸入了。上面使用反斜線轉義的的圓括號在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

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

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

命令行的結構

ImageMagick命令行包括

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

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

Input Filename 輸入文件名

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

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

下面幾段解釋這些擴展

Filename Globbing 文件名通配符

在unix shell中,特定的字符諸如(*)和問號(?)根據模式匹配自動生成文件名清單。這種特征就是廣為人知的通配。ImageMagick為系統支持文件名通配,比如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 選擇幀

一些圖像格式包含不止一個圖像幀?;蛟S你只想要第一幅圖像?;蛘咦詈笠环?,或中間的一些圖像。你可以指定將讀取哪個圖像幀通過在文件名后加上用括號包圍的幀范圍。此處我們的圖像(一個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一節。

Selecting an Image Region 圖像選區

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

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 參數能出現多種形式。我們在這一節描述他們中的多數。

帶有geometry 參數的圖像選項和設置包括如下。記住從語法上分析有些參數略有不同。更多細節,請分別查看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軸總是向下的?。?/p>

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像素時。為了保持寬高比,高度因此不得不變為(480/640)x100像素=75像素,所以最后尺寸為100x75

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

我們看到ImageMagick在保持圖像寬高比方面很出色,防止你喜歡的圖像和照片失真。但是你可能真的想要尺寸變為100x200,因此拉伸圖像。在這種情況下,僅僅告訴ImageMagick你真的想要(!)通過在geometry參數后附加一個感嘆號。這樣會強制使圖像變為你指定的大小。所以,如果你指定100x200! ,圖像尺寸會恰恰變成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

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

除非其中之一的幾何規格超出圖像原來的寬和高才使用>改變圖像尺寸。除非圖像原來的尺寸超過幾何規格才用<調整圖像大小。在任一情況下,如果發生變化,結果就像>或>操作符不存在一樣。所以,在上面的第三個例子中,我們指定了100x200> 并且原圖像大小是640x480,所以圖像大小減小就如我們指定了100x200一樣。然而,上面第四個例子圖像大小將沒有變化。

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

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

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

Geometry的偏移量

這是一些說明geometry參數中偏移量用法的例子。偏移量的一種典型用法就是結合 –region 選項。這個選項允許很多其他選項修改圖像中指定的矩形子區域的像素。照此,需要給出哪個區域的寬和高,還有相對圖像的偏移量,它是一對坐標,指明了該區域在整個更大圖像中的位置。下面,在第一個例子中,我們指定一個區域大小為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區域本身受到 –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不要解釋這些字符,而是直接傳遞給命令行執行。在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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容