(命令列的) 圖片整形術
請將這些圖片另存新檔, 並取一個比較短的名字:
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 '日出' -font /usr/share/fonts/truetype/arphic/ukai.ttc -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" 等文件連結)。 更多應用實例:
- 本頁最新版網址: https://frdm.cyut.edu.tw/~ckhung/b/clr/imagemagick.php; 您所看到的版本: November 07 2013 12:10:26.
- 作者: 朝陽科技大學 資訊管理系 洪朝貴
- 寶貝你我的地球, 請 減少列印, 多用背面, 丟棄時做垃圾分類。
- 本文件以 Creative Commons Attribution-ShareAlike License 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。