#!/usr/bin/env python
# coding: utf-8

# In[2]:


from PIL import Image
import numpy as np


# In[2]:


I = Image.open('font.png')
I


# In[3]:


data = np.array(I)


# In[4]:


def pack_data_into_bytes(data):
    for line in data:
        val = 0
        for i, px in enumerate(line):
            val += 0 if px == 0 else (1 << i)
        yield val


# In[5]:


bytedata = [*pack_data_into_bytes(data)]


# In[6]:


len(bytedata)


# In[7]:


32*4


# In[8]:


bytedata


# In[9]:


with open('src/assets/font.data', 'wb') as f:
    f.write(bytes(bytedata))


# In[61]:


subpixel = Image.open("Yesh1.gif")
subpixel_rgb = subpixel.convert("RGB")


# In[69]:


data = np.array(subpixel)
data


# In[63]:


part = Image.fromarray(data[8:16, :4], mode='RGB')


# In[64]:


def get_palette_colors(img, num_colors = 20):
    raw_data = img.palette.getdata()[1][:3*num_colors]
    for i in range(num_colors):
        rgb = raw_data[3*i:3*(i+1)]
        yield [*rgb]


# In[182]:


for (r, g, b) in [*get_palette_colors(subpixel)]:
    print(f"{r>>3} {g>>3} {b>>3}")


# In[60]:





# In[66]:


subpixel


# In[80]:


def get_chars(img_data):
    for i in range(3):
        for j in range(32):
            yield data[8*i:8*(i+1), 8*j:8*j+4]


# In[43]:


[*zip(*[[1,2,3], [4,5,6]])]


# In[77]:


subpixel.size


# In[79]:


32*3


# In[143]:


stacked = np.vstack([*get_chars(data)])


# In[179]:


fontdata = bytes(stacked.reshape(-1))
with open('src/assets/subpixel.data', 'wb') as f:
    f.write(fontdata)


# In[171]:





# In[135]:


subpixel.mode


# In[139]:


stacked.putpalette(subpixel.palette.getdata()[1])


# In[140]:


stacked


# In[141]:


stacked.save("stacked.gif")


# In[96]:


subpixel.getcolors()


# In[98]:


subpixel.palette.tobytes()


# In[100]:


stacked.palette.dirty


# In[5]:


onepixel = Image.open("subtext1.png")
opa = np.array(onepixel)


# In[11]:


opa[7:12,1]


# In[ ]:




