はじめに
SAOImageDS9 で Region の色を変えようとしたとき、
「何が指定できるのか分からない」と感じたことはありませんか?
Region の色設定を見ると、次のような画面になります。
ご覧の通り、メニュー上では
- Black
- White
- Red
- Green
- Blue
- Cyan
- Magenta
- Yellow
といった基本的な色しか表示されていません。
それ以外の色を指定しようとすると、
色名を入力する形式になっており、
どんな色が使えるのか分からない
と感じてしまいがちです。
この記事では、DS9 に登録されている色名を一覧としてまとめてみます。
色名は GitHub 上で管理されている
DS9 のソースコードを覗いてみると、
次のディレクトリに色の定義がまとまっています。
https://github.com/SAOImageDS9/SAOImageDS9/tree/master/ds9/icons/ui/colors
この中には、
red.pngskyblue.pngdarkslategray.png
のように、色名をそのままファイル名にした PNG が並んでいます。
つまり、
このディレクトリにある PNG の名前 = DS9 で指定できる色名
という対応関係になっています。
色名と実際の色を一覧で見てみる
とはいえ、GitHub 上で PNG を 1 枚ずつ確認するのは少し手間です。
そこで、
DS9 に登録されている色名と、その実際の色を一覧で確認する
ためのスクリプトを書いてみました。
以下のスクリプトでは、
- GitHub API で
colorsディレクトリを取得 - PNG ファイルを 1 枚ずつダウンロード
- 画像の中央ピクセルから色を取得
- 色名と HEX コードを表として出力
を行っています。
実装コードは Google Colab こちら からも実行できます。
(※ 各 PNG を個別に取得するため、実行には数秒〜十数秒程度かかります)
import requests
import pandas as pd
from PIL import Image
from io import BytesIO
import time
owner = "SAOImageDS9"
repo = "SAOImageDS9"
path = "ds9/icons/ui/colors"
branch = "master"
api_url = f"https://api.github.com/repos/{owner}/{repo}/contents/{path}?ref={branch}"
files = requests.get(api_url).json()
rows = []
png_files = [f for f in files if f["name"].lower().endswith(".png")]
total = len(png_files)
start = time.time()
for i, f in enumerate(png_files, 1):
name = f["name"]
color_name = name.replace(".png", "")
raw_url = (
f"https://raw.githubusercontent.com/"
f"{owner}/{repo}/{branch}/{path}/{name}"
)
print(f"[{i}/{total}] processing {name}")
img_bytes = requests.get(raw_url).content
img = Image.open(BytesIO(img_bytes)).convert("RGB")
w, h = img.size
r, g, b = img.getpixel((w // 2, h // 2))
hex_code = f"#{r:02x}{g:02x}{b:02x}"
rows.append({
"color name": f"`{color_name}`",
"preview": f'<img src="{raw_url}" width="15">',
"HEX": f"`{hex_code}`",
})
df = pd.DataFrame(rows).sort_values("color name")
elapsed = time.time() - start
print(f"\nTotal colors: {len(df)}")
print(f"Elapsed time: {elapsed:.2f} sec")
print(df.to_markdown(index=False))
| color name | preview | HEX |
|:-----------------------|:-------------------------------------------------------------------------------------------------------------------------------------|:----------|
| `aliceblue` | <img src="https://raw.githubusercontent.com/SAOImageDS9/SAOImageDS9/master/ds9/icons/ui/colors/aliceblue.png" width="15"> | `#f0f8ff` |
| `antiquewhite` | <img src="https://raw.githubusercontent.com/SAOImageDS9/SAOImageDS9/master/ds9/icons/ui/colors/antiquewhite.png" width="15"> | `#faebd7` |
| `aquamarine` | <img src="https://raw.githubusercontent.com/SAOImageDS9/SAOImageDS9/master/ds9/icons/ui/colors/aquamarine.png" width="15"> | `#7fffd4` |
| `azure` | <img src="https://raw.githubusercontent.com/SAOImageDS9/SAOImageDS9/master/ds9/icons/ui/colors/azure.png" width="15"> | `#f0ffff` |
...
全部で、121色登録されていました。これをすべて並べてみます。
このように、実はいろんな色が使えます。
補足:HEX カラーコードも指定できる
ここまでで確認した一覧は、DS9 に 色名として登録されている色 の一覧です。
つまり、skyblue や darkslategray のように 色名で指定できるのはこの範囲のみ ということになります。
一方で、DS9 の Region の色指定では HEX カラーコードを直接指定することも可能です。そのため、色名として登録されていない色であっても、HEX で表せる色であれば問題なく使用できます。
例えば、Region の Circle を「立教カラー」で表示したい場合でも、Other Color に #684588 と入力するだけで反映されます。
まとめ
- DS9 の Region の色指定は入力形式のため、何が使えるか分かりにくい
- GitHub 上のソースコードには、多くの色名が定義されている
- 一覧で確認すると、色指定の選択肢がかなり多いことが分かる
- HEX を使えば、実質的にどんな色でも指定できる
「この色名、使えるのかな?」と迷ったときに、
一覧として活用していただけると幸いです。
関連記事
