Generating Color Tables with ImageMagick

用 ImageMagick 建立色表


【摘要】一個簡短的 BASH 程式,用 ImageMagick 製作指定背景色的顏色表格圖,當編輯佈景、樣式或 CSS 檔時可做為設定顏色的參考。


【目錄】

    【前言
    【使用方法
    【指令檔
    【後語

【前言】

一、在編輯佈景樣式時,都會牽扯到顏色的設定;尤其是程式碼的 highlight 需要在不同的背景色下選用多種顏色,所以最好能有色表參考。

二、本 BASH 指令所輸出的長圖是在一種背景色上顯示七百餘種的前景色,應該足以讓人找到清晰可用的顏色。

三、前一篇網誌是輸出 HTML 檔,能在網路瀏覽器上顯示相同的色表,可依各人所好選擇使用。

四、範例圖(只取每圖的一小部分):

Color-Table-1-ffe0c0

Color-Table-2-a08060

Color-Table-3-402000

Color-Table-4-c0ffc0

【使用方法】

將【指令檔】一節的內容存成 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 色表,屬於文字檔,能瞬間完成。本例要製作七百餘圖檔,可預期地,需相當長的時間。經多次執行得知,製作一個色表約需一分鐘。在此讓大家有個心理準備。


發表留言