(命令列的) 圖片整形術


請將這些圖片另存新檔, 並取一個比較短的名字: gnu-tux, star-trek, snoopy, kanzi, sunrise, garden。 先看一下所有的圖: xli *.jpg 用 xli 看多張圖片時, 按 n 或空間棒進入下一頁; p 回到上一頁。 如果圖太大, 可以縮小顯示, 例如: xli -zoom 25 gnu-tux.jpg star-trek.jpg 以 25% 的大小顯示。 然後試試以下指令, 並觀察變換前及變換後的圖片:

	convert -spread 3 garden.jpg a.jpg
	convert -emboss 3 kanzi.jpg a.jpg
	convert -modulate 100,20 star-trek.jpg a.jpg
	convert -charcoal 3 gnu-tux.jpg a.jpg
	convert -paint 3 snoopy.jpg a.jpg
	convert -annotate 0x0+4+26 'sunrise behind a tree'
		-font courier -pointsize 24 sunrise.jpg a.jpg

如果只有兩三個圖檔要處理, 或每個圖檔要做不同的處理必須逐一手工修飾, 其實圖形介面的 gimp 或許更合你用。 但若要一次處理多個檔案呢? 這就是命列列厲害的地方了。

	echo hello	# 照印, 蠻無聊的指令
	for s in hello how are you ; do echo $s ; done	# 迴圈
	for f in *.jpg ; do echo $f ; done	# 印出所有 .jpg 檔名
	mkdir emboss
	for f in *.jpg ; do echo convert -emboss 3 $f emboss/$f ; done
	for f in *.jpg ; do convert -emboss 3 $f emboss/$f ; done

另一個方法是用 regular expressions 把每個檔名都改成提及此檔名的指令, 再交由 bash 執行:

	ls *.jpg
	ls *.jpg | perl -pe 's#(.*)#convert -emboss 3 $1 emboss/$1#'
	ls *.jpg | perl -pe 's#(.*)#convert -emboss 3 $1 emboss/$1#' | bash

平常我們用程式產生資料; 這裡卻是用資料產生程式。 靜下來想想這個例子怪異的地方, 再發揮你的想像力, 想像如果我們產生的指令不是 convert, 而是 ???, 你就知道為什麼有些人堅持要用命令列了。 重複性, 機械化的動作, 就不該是人做的。 用滑鼠選單來做, 並沒有比較高明

ImageMagick 也有 Windows 版。 更多功能詳見 官方網站 (左側 "Command-Line Tools" 等文件連結)。 更多應用實例:

  1. More graphics from the command line
  2. 5 ImageMagick command line examples part 2

命令列讀本

  1. 目錄
  2. 前言
  3. 瀏覽
  4. 套件
  5. 圖片整形
  6. 老鼠迷宮
  7. 迷宮積木
  8. 誰常上機?
  9. 網頁做簡報
  10. tidy 網頁
  11. 編碼
  12. 客製
  13. Regexp
  14. 目錄比較
  15. 聯集差集

附錄

  1. GUI 求生
  2. 基本指令
  3. 阿貴管理