用 ImageMagick 建立色表
【摘要】一個簡短的 BASH 程式,用 ImageMagick 製作指定背景色的顏色表格圖,當編輯佈景、樣式或 CSS 檔時可做為設定顏色的參考。
【目錄】
【前言】【使用方法】
【指令檔】
【後語】
【前言】
一、在編輯佈景樣式時,都會牽扯到顏色的設定;尤其是程式碼的 highlight 需要在不同的背景色下選用多種顏色,所以最好能有色表參考。
二、本 BASH 指令所輸出的長圖是在一種背景色上顯示七百餘種的前景色,應該足以讓人找到清晰可用的顏色。
三、前一篇網誌是輸出 HTML 檔,能在網路瀏覽器上顯示相同的色表,可依各人所好選擇使用。
四、範例圖(只取每圖的一小部分):
【使用方法】
將【指令檔】一節的內容存成 color-table-im.sh
,執行:
bash color-table-im.sh 背景色
背景色
:網頁背景顏色;只接受十六進位色碼,不包含井字號,如:abcdef
所製成的圖檔會放在目前的目錄。
【指令檔】
#!/bin/bash # 用 ImageMagick 建立色表 # 檢查是否有給背景色,若無,即中止 if [ -z "${1}" ]; then echo echo " Usage:" echo " bash ${0##*/} <Background-Color>" echo echo " You have to specify a color in hexadecimal notation without the leading #." echo exit fi # 整個色表的背景色 ColorBg="#${1}" # 整個色表的字型 Font="Courier" # 最小矩形圖塊的字型尺寸 Point=16 # 最小矩形圖塊的尺寸 Width=80 Height=24 # 最上方標頭的尺寸 WidthHead=$((${Width}*9)) HeightHead=24 # 最上方的標頭必需用特定的字色和背景色,不然可能會看不清楚 ColorHead="#000000" ColorHeadBg="#808080" # 是否為一橫行最左邊的第一個最小矩形圖塊 Flag=1 # 前景色的成分碼 HX="ff e0 c0 a0 80 60 40 20 00" # 製作最小矩形圖塊;需有三個輸入值,分別是顏色十六進位碼的三個成分碼 block () { convert -background ${ColorBg} -fill "#${1}${2}${3}" -font ${Font} -pointsize ${Point} -size ${Width}x${Height} -gravity Center label:"#${1}${2}${3}" block-${1}${2}${3}.png } # -background:矩形圖塊背景色 # -fill:矩形圖塊字色 # -font:字型 # -pointsize:字型尺寸 # -size:矩形圖塊尺寸 # -gravity:文字對齊方式 # label:文字內容;用字色色碼 # 最後為輸出檔名 # 為了將完成圖放在目前目錄,所以先存起來 PD=${PWD} # 因為會產生七百餘個小圖塊,所以到系統暫存目錄去做,省得最後要刪掉 cd /tmp # 製作最上方的標頭,標出背景色 convert -background ${ColorHeadBg} -fill ${ColorHead} -font ${Font} -size ${WidthHead}x${HeightHead} -gravity South label:"Backgroiund Color: ${ColorBg}" table.png # 此處故意不給字型尺寸,讓 ImageMagick 使用能容納的最大尺寸 # 顏色的十六進位碼分成紅、綠、藍三個成分碼,所以要各自輪換 for i in $HX do for j in $HX do for k in $HX do # 製作最小矩形圖塊 block $i $j $k # 不是一橫行最左邊的第一個最小矩形圖塊時才和左邊的圖塊合併 if [ ${Flag} -eq 0 ] then convert block-$i$j"ff".png block-$i$j$k.png +append block-$i$j"ff".png # 同一橫行用 +append 做橫向合併 fi # 製作完最左邊第一個小圖塊後,再製作的小圖塊就不是第一個了,所以設成 0 Flag=0 done # 完成一橫行後,再製作的小圖塊又是第一個了,所以設成 1 Flag=1 convert table.png block-$i$j"ff".png -append table.png # 各橫行用 -append 做縱向合併 done done # 將完成圖從暫存目錄複製到當前目錄,並用背景色為檔名 cp table.png ${PD}/Table${ColorBg}.png exit
【後語】
一、如果想一次製作多個色表,可用以下指令:
HX="ffe0c0 a08060 402000" for i in ${HX} do bash color-table-im.sh ${i} sleep 1 done
請先修改 HX 變數值成自己想要做的十六進位顏色碼(不含 # 號,以空格分開各值)。
二、前篇網誌是輸出 HTML 色表,屬於文字檔,能瞬間完成。本例要製作七百餘圖檔,可預期地,需相當長的時間。經多次執行得知,製作一個色表約需一分鐘。在此讓大家有個心理準備。