2022/07/20(水) [n年前の日記]
#1 [cg_tools][tic80] TIC-80のパレットデータを手元に残そうとして少しハマった
TIC-80 は、ある時期からパレットデータを SWEETIE 16 というデータに差し替えていたらしいのだけど。
*1
_Palette - nesbox/TIC-80 Wiki
_Sweetie 16 Palette - lospec.com
この SWEETIE 16 パレットデータを手元に残そうとして、少しハマってしまった。
TIC-80 の Wiki にアップロードされているパレットデータ画像は、ページに記述されてる数値とビミョーに違っているようで…。具体的には、水色がちょっとずれてる。作業していてなんだか変だなと思ったら、そういうオチだった…。
そんなわけで、画像はちょっと当てにならないので、記述されている数値を元にしてパレットデータ画像を新規に生成するPythonスクリプトを書いてみた。
いやまあ、losepc.com からダウンロードできる画像や .gpl を使えば問題無さそうだけど…。ざっと調べた感じでは、そちらはちゃんと数値が合ってるように見えた。TIC-80 の Wiki に載ってる画像のみがおかしい。
_Sweetie 16 Palette - lospec.com
でもまあ、「Python + Pillow を使えばこういうこともできるよね」的サンプルの一つ、みたいな感じで一応アップロードしておきます。
_Palette - nesbox/TIC-80 Wiki
_Sweetie 16 Palette - lospec.com
この SWEETIE 16 パレットデータを手元に残そうとして、少しハマってしまった。
TIC-80 の Wiki にアップロードされているパレットデータ画像は、ページに記述されてる数値とビミョーに違っているようで…。具体的には、水色がちょっとずれてる。作業していてなんだか変だなと思ったら、そういうオチだった…。
そんなわけで、画像はちょっと当てにならないので、記述されている数値を元にしてパレットデータ画像を新規に生成するPythonスクリプトを書いてみた。
いやまあ、losepc.com からダウンロードできる画像や .gpl を使えば問題無さそうだけど…。ざっと調べた感じでは、そちらはちゃんと数値が合ってるように見えた。TIC-80 の Wiki に載ってる画像のみがおかしい。
_Sweetie 16 Palette - lospec.com
でもまあ、「Python + Pillow を使えばこういうこともできるよね」的サンプルの一つ、みたいな感じで一応アップロードしておきます。
◎ 生成した .gpl や .png。 :
◎ 生成Pythonスクリプト。 :
動作確認環境は、Windows10 x64 21H2 + Python 3.9.13 64bit + Pillow 9.1.1。
sweetie-16_tic80new_.gpl と sweetie-16_tic80new.png を生成する。
動作には Pillow のインストールが必要。pip install Pillow -U でインストールできるはず。
_create_sweetie-16_image.py
py create_sweetie-16_image.py で実行すれば、.gpl と .png が得られる。
sweetie-16_tic80new_.gpl と sweetie-16_tic80new.png を生成する。
動作には Pillow のインストールが必要。pip install Pillow -U でインストールできるはず。
_create_sweetie-16_image.py
from PIL import Image from PIL import ImageDraw out_gpl_file = "sweetie-16_tic80new_.gpl" out_img_file = "sweetie-16_tic80new.png" title = "Sweetie-16 (TIC-80 new)" tbl = [ ["Black", 0, "1A1C2C"], ["Purple", 1, "5D275D"], ["Red", 2, "B13E53"], ["Orange", 3, "EF7D57"], ["Yellow", 4, "FFCD75"], ["Light Green", 5, "A7F070"], ["Green", 6, "38B764"], ["Dark Green", 7, "257179"], ["Dark Blue", 8, "29366F"], ["Blue", 9, "3B5DC9"], ["Light Blue", 10, "41A6F6"], ["Cyan", 11, "73EFF7"], ["White", 12, "F4F4F4"], ["Light Grey", 13, "94B0C2"], ["Grey", 14, "566C86"], ["Dark Grey", 15, "333C57"], ] def main(): pal = [] # create .gpl lst = [] lst.append("GIMP Palette") lst.append("Name: %s" % title) lst.append("Columns: 8") lst.append("#") lst.append("#") for t in tbl: name, index, hexstr = t col = int(hexstr, 16) r = (col >> 16) & 0x0ff g = (col >> 8) & 0x0ff b = col & 0x0ff s = "%-8d%-8d%-8d%06x %d %s" % (r, g, b, col, index, name) lst.append(s) pal.append((r, g, b)) for s in lst: print(s) # save .gpl file with open(out_gpl_file, mode="w") as f: f.write("\n".join(lst)) f.write("\n") print("# Save %s" % out_gpl_file) # create image and save xcnt, ycnt = 8, 2 # xcnt, ycnt = 16, 1 w, h = 32, 32 img_w, img_h = w * xcnt, h * ycnt im = Image.new("P", (img_w, img_h), (0, 0, 0)) paldata = [] for c in pal: r, g, b = c paldata.append(r) paldata.append(g) paldata.append(b) im.putpalette(paldata, rawmode="RGB") draw = ImageDraw.Draw(im) x, y = 0, 0 for c in range(len(pal)): draw.rectangle((x, y, x + w - 1, y + h - 1), fill=c) x += w if x >= img_w: x = 0 y += h im.save(out_img_file) print("# Save %s" % out_img_file) if __name__ == '__main__': main()
py create_sweetie-16_image.py で実行すれば、.gpl と .png が得られる。
*1: 最初の頃は、DB16 (DawnBringer 16) というパレットデータが割り当てられてた。
[ ツッコむ ]
以上です。