/ utils / font_to_bin.py
font_to_bin.py
  1  # Quick script to convert Adafruit GFX font into binary file.
  2  # Author: Tony DiCola
  3  # License: MIT (https://opensource.org/licenses/MIT)
  4  # Taken from glcdfont.c from Adafruit GFX Arduino library.
  5  # fmt: off
  6  FONT = bytes((
  7      0x00, 0x00, 0x00, 0x00, 0x00,
  8      0x3E, 0x5B, 0x4F, 0x5B, 0x3E,
  9      0x3E, 0x6B, 0x4F, 0x6B, 0x3E,
 10      0x1C, 0x3E, 0x7C, 0x3E, 0x1C,
 11      0x18, 0x3C, 0x7E, 0x3C, 0x18,
 12      0x1C, 0x57, 0x7D, 0x57, 0x1C,
 13      0x1C, 0x5E, 0x7F, 0x5E, 0x1C,
 14      0x00, 0x18, 0x3C, 0x18, 0x00,
 15      0xFF, 0xE7, 0xC3, 0xE7, 0xFF,
 16      0x00, 0x18, 0x24, 0x18, 0x00,
 17      0xFF, 0xE7, 0xDB, 0xE7, 0xFF,
 18      0x30, 0x48, 0x3A, 0x06, 0x0E,
 19      0x26, 0x29, 0x79, 0x29, 0x26,
 20      0x40, 0x7F, 0x05, 0x05, 0x07,
 21      0x40, 0x7F, 0x05, 0x25, 0x3F,
 22      0x5A, 0x3C, 0xE7, 0x3C, 0x5A,
 23      0x7F, 0x3E, 0x1C, 0x1C, 0x08,
 24      0x08, 0x1C, 0x1C, 0x3E, 0x7F,
 25      0x14, 0x22, 0x7F, 0x22, 0x14,
 26      0x5F, 0x5F, 0x00, 0x5F, 0x5F,
 27      0x06, 0x09, 0x7F, 0x01, 0x7F,
 28      0x00, 0x66, 0x89, 0x95, 0x6A,
 29      0x60, 0x60, 0x60, 0x60, 0x60,
 30      0x94, 0xA2, 0xFF, 0xA2, 0x94,
 31      0x08, 0x04, 0x7E, 0x04, 0x08,
 32      0x10, 0x20, 0x7E, 0x20, 0x10,
 33      0x08, 0x08, 0x2A, 0x1C, 0x08,
 34      0x08, 0x1C, 0x2A, 0x08, 0x08,
 35      0x1E, 0x10, 0x10, 0x10, 0x10,
 36      0x0C, 0x1E, 0x0C, 0x1E, 0x0C,
 37      0x30, 0x38, 0x3E, 0x38, 0x30,
 38      0x06, 0x0E, 0x3E, 0x0E, 0x06,
 39      0x00, 0x00, 0x00, 0x00, 0x00,
 40      0x00, 0x00, 0x5F, 0x00, 0x00,
 41      0x00, 0x07, 0x00, 0x07, 0x00,
 42      0x14, 0x7F, 0x14, 0x7F, 0x14,
 43      0x24, 0x2A, 0x7F, 0x2A, 0x12,
 44      0x23, 0x13, 0x08, 0x64, 0x62,
 45      0x36, 0x49, 0x56, 0x20, 0x50,
 46      0x00, 0x08, 0x07, 0x03, 0x00,
 47      0x00, 0x1C, 0x22, 0x41, 0x00,
 48      0x00, 0x41, 0x22, 0x1C, 0x00,
 49      0x2A, 0x1C, 0x7F, 0x1C, 0x2A,
 50      0x08, 0x08, 0x3E, 0x08, 0x08,
 51      0x00, 0x80, 0x70, 0x30, 0x00,
 52      0x08, 0x08, 0x08, 0x08, 0x08,
 53      0x00, 0x00, 0x60, 0x60, 0x00,
 54      0x20, 0x10, 0x08, 0x04, 0x02,
 55      0x3E, 0x51, 0x49, 0x45, 0x3E,
 56      0x00, 0x42, 0x7F, 0x40, 0x00,
 57      0x72, 0x49, 0x49, 0x49, 0x46,
 58      0x21, 0x41, 0x49, 0x4D, 0x33,
 59      0x18, 0x14, 0x12, 0x7F, 0x10,
 60      0x27, 0x45, 0x45, 0x45, 0x39,
 61      0x3C, 0x4A, 0x49, 0x49, 0x31,
 62      0x41, 0x21, 0x11, 0x09, 0x07,
 63      0x36, 0x49, 0x49, 0x49, 0x36,
 64      0x46, 0x49, 0x49, 0x29, 0x1E,
 65      0x00, 0x00, 0x14, 0x00, 0x00,
 66      0x00, 0x40, 0x34, 0x00, 0x00,
 67      0x00, 0x08, 0x14, 0x22, 0x41,
 68      0x14, 0x14, 0x14, 0x14, 0x14,
 69      0x00, 0x41, 0x22, 0x14, 0x08,
 70      0x02, 0x01, 0x59, 0x09, 0x06,
 71      0x3E, 0x41, 0x5D, 0x59, 0x4E,
 72      0x7C, 0x12, 0x11, 0x12, 0x7C,
 73      0x7F, 0x49, 0x49, 0x49, 0x36,
 74      0x3E, 0x41, 0x41, 0x41, 0x22,
 75      0x7F, 0x41, 0x41, 0x41, 0x3E,
 76      0x7F, 0x49, 0x49, 0x49, 0x41,
 77      0x7F, 0x09, 0x09, 0x09, 0x01,
 78      0x3E, 0x41, 0x41, 0x51, 0x73,
 79      0x7F, 0x08, 0x08, 0x08, 0x7F,
 80      0x00, 0x41, 0x7F, 0x41, 0x00,
 81      0x20, 0x40, 0x41, 0x3F, 0x01,
 82      0x7F, 0x08, 0x14, 0x22, 0x41,
 83      0x7F, 0x40, 0x40, 0x40, 0x40,
 84      0x7F, 0x02, 0x1C, 0x02, 0x7F,
 85      0x7F, 0x04, 0x08, 0x10, 0x7F,
 86      0x3E, 0x41, 0x41, 0x41, 0x3E,
 87      0x7F, 0x09, 0x09, 0x09, 0x06,
 88      0x3E, 0x41, 0x51, 0x21, 0x5E,
 89      0x7F, 0x09, 0x19, 0x29, 0x46,
 90      0x26, 0x49, 0x49, 0x49, 0x32,
 91      0x03, 0x01, 0x7F, 0x01, 0x03,
 92      0x3F, 0x40, 0x40, 0x40, 0x3F,
 93      0x1F, 0x20, 0x40, 0x20, 0x1F,
 94      0x3F, 0x40, 0x38, 0x40, 0x3F,
 95      0x63, 0x14, 0x08, 0x14, 0x63,
 96      0x03, 0x04, 0x78, 0x04, 0x03,
 97      0x61, 0x59, 0x49, 0x4D, 0x43,
 98      0x00, 0x7F, 0x41, 0x41, 0x41,
 99      0x02, 0x04, 0x08, 0x10, 0x20,
100      0x00, 0x41, 0x41, 0x41, 0x7F,
101      0x04, 0x02, 0x01, 0x02, 0x04,
102      0x40, 0x40, 0x40, 0x40, 0x40,
103      0x00, 0x03, 0x07, 0x08, 0x00,
104      0x20, 0x54, 0x54, 0x78, 0x40,
105      0x7F, 0x28, 0x44, 0x44, 0x38,
106      0x38, 0x44, 0x44, 0x44, 0x28,
107      0x38, 0x44, 0x44, 0x28, 0x7F,
108      0x38, 0x54, 0x54, 0x54, 0x18,
109      0x00, 0x08, 0x7E, 0x09, 0x02,
110      0x18, 0xA4, 0xA4, 0x9C, 0x78,
111      0x7F, 0x08, 0x04, 0x04, 0x78,
112      0x00, 0x44, 0x7D, 0x40, 0x00,
113      0x20, 0x40, 0x40, 0x3D, 0x00,
114      0x7F, 0x10, 0x28, 0x44, 0x00,
115      0x00, 0x41, 0x7F, 0x40, 0x00,
116      0x7C, 0x04, 0x78, 0x04, 0x78,
117      0x7C, 0x08, 0x04, 0x04, 0x78,
118      0x38, 0x44, 0x44, 0x44, 0x38,
119      0xFC, 0x18, 0x24, 0x24, 0x18,
120      0x18, 0x24, 0x24, 0x18, 0xFC,
121      0x7C, 0x08, 0x04, 0x04, 0x08,
122      0x48, 0x54, 0x54, 0x54, 0x24,
123      0x04, 0x04, 0x3F, 0x44, 0x24,
124      0x3C, 0x40, 0x40, 0x20, 0x7C,
125      0x1C, 0x20, 0x40, 0x20, 0x1C,
126      0x3C, 0x40, 0x30, 0x40, 0x3C,
127      0x44, 0x28, 0x10, 0x28, 0x44,
128      0x4C, 0x90, 0x90, 0x90, 0x7C,
129      0x44, 0x64, 0x54, 0x4C, 0x44,
130      0x00, 0x08, 0x36, 0x41, 0x00,
131      0x00, 0x00, 0x77, 0x00, 0x00,
132      0x00, 0x41, 0x36, 0x08, 0x00,
133      0x02, 0x01, 0x02, 0x04, 0x02,
134      0x3C, 0x26, 0x23, 0x26, 0x3C,
135      0x1E, 0xA1, 0xA1, 0x61, 0x12,
136      0x3A, 0x40, 0x40, 0x20, 0x7A,
137      0x38, 0x54, 0x54, 0x55, 0x59,
138      0x21, 0x55, 0x55, 0x79, 0x41,
139      0x22, 0x54, 0x54, 0x78, 0x42, # a-umlaut
140      0x21, 0x55, 0x54, 0x78, 0x40,
141      0x20, 0x54, 0x55, 0x79, 0x40,
142      0x0C, 0x1E, 0x52, 0x72, 0x12,
143      0x39, 0x55, 0x55, 0x55, 0x59,
144      0x39, 0x54, 0x54, 0x54, 0x59,
145      0x39, 0x55, 0x54, 0x54, 0x58,
146      0x00, 0x00, 0x45, 0x7C, 0x41,
147      0x00, 0x02, 0x45, 0x7D, 0x42,
148      0x00, 0x01, 0x45, 0x7C, 0x40,
149      0x7D, 0x12, 0x11, 0x12, 0x7D, # A-umlaut
150      0xF0, 0x28, 0x25, 0x28, 0xF0,
151      0x7C, 0x54, 0x55, 0x45, 0x00,
152      0x20, 0x54, 0x54, 0x7C, 0x54,
153      0x7C, 0x0A, 0x09, 0x7F, 0x49,
154      0x32, 0x49, 0x49, 0x49, 0x32,
155      0x3A, 0x44, 0x44, 0x44, 0x3A, # o-umlaut
156      0x32, 0x4A, 0x48, 0x48, 0x30,
157      0x3A, 0x41, 0x41, 0x21, 0x7A,
158      0x3A, 0x42, 0x40, 0x20, 0x78,
159      0x00, 0x9D, 0xA0, 0xA0, 0x7D,
160      0x3D, 0x42, 0x42, 0x42, 0x3D, # O-umlaut
161      0x3D, 0x40, 0x40, 0x40, 0x3D,
162      0x3C, 0x24, 0xFF, 0x24, 0x24,
163      0x48, 0x7E, 0x49, 0x43, 0x66,
164      0x2B, 0x2F, 0xFC, 0x2F, 0x2B,
165      0xFF, 0x09, 0x29, 0xF6, 0x20,
166      0xC0, 0x88, 0x7E, 0x09, 0x03,
167      0x20, 0x54, 0x54, 0x79, 0x41,
168      0x00, 0x00, 0x44, 0x7D, 0x41,
169      0x30, 0x48, 0x48, 0x4A, 0x32,
170      0x38, 0x40, 0x40, 0x22, 0x7A,
171      0x00, 0x7A, 0x0A, 0x0A, 0x72,
172      0x7D, 0x0D, 0x19, 0x31, 0x7D,
173      0x26, 0x29, 0x29, 0x2F, 0x28,
174      0x26, 0x29, 0x29, 0x29, 0x26,
175      0x30, 0x48, 0x4D, 0x40, 0x20,
176      0x38, 0x08, 0x08, 0x08, 0x08,
177      0x08, 0x08, 0x08, 0x08, 0x38,
178      0x2F, 0x10, 0xC8, 0xAC, 0xBA,
179      0x2F, 0x10, 0x28, 0x34, 0xFA,
180      0x00, 0x00, 0x7B, 0x00, 0x00,
181      0x08, 0x14, 0x2A, 0x14, 0x22,
182      0x22, 0x14, 0x2A, 0x14, 0x08,
183      0x55, 0x00, 0x55, 0x00, 0x55, # #176 (25% block) missing in old code
184      0xAA, 0x55, 0xAA, 0x55, 0xAA, # 50% block
185      0xFF, 0x55, 0xFF, 0x55, 0xFF, # 75% block
186      0x00, 0x00, 0x00, 0xFF, 0x00,
187      0x10, 0x10, 0x10, 0xFF, 0x00,
188      0x14, 0x14, 0x14, 0xFF, 0x00,
189      0x10, 0x10, 0xFF, 0x00, 0xFF,
190      0x10, 0x10, 0xF0, 0x10, 0xF0,
191      0x14, 0x14, 0x14, 0xFC, 0x00,
192      0x14, 0x14, 0xF7, 0x00, 0xFF,
193      0x00, 0x00, 0xFF, 0x00, 0xFF,
194      0x14, 0x14, 0xF4, 0x04, 0xFC,
195      0x14, 0x14, 0x17, 0x10, 0x1F,
196      0x10, 0x10, 0x1F, 0x10, 0x1F,
197      0x14, 0x14, 0x14, 0x1F, 0x00,
198      0x10, 0x10, 0x10, 0xF0, 0x00,
199      0x00, 0x00, 0x00, 0x1F, 0x10,
200      0x10, 0x10, 0x10, 0x1F, 0x10,
201      0x10, 0x10, 0x10, 0xF0, 0x10,
202      0x00, 0x00, 0x00, 0xFF, 0x10,
203      0x10, 0x10, 0x10, 0x10, 0x10,
204      0x10, 0x10, 0x10, 0xFF, 0x10,
205      0x00, 0x00, 0x00, 0xFF, 0x14,
206      0x00, 0x00, 0xFF, 0x00, 0xFF,
207      0x00, 0x00, 0x1F, 0x10, 0x17,
208      0x00, 0x00, 0xFC, 0x04, 0xF4,
209      0x14, 0x14, 0x17, 0x10, 0x17,
210      0x14, 0x14, 0xF4, 0x04, 0xF4,
211      0x00, 0x00, 0xFF, 0x00, 0xF7,
212      0x14, 0x14, 0x14, 0x14, 0x14,
213      0x14, 0x14, 0xF7, 0x00, 0xF7,
214      0x14, 0x14, 0x14, 0x17, 0x14,
215      0x10, 0x10, 0x1F, 0x10, 0x1F,
216      0x14, 0x14, 0x14, 0xF4, 0x14,
217      0x10, 0x10, 0xF0, 0x10, 0xF0,
218      0x00, 0x00, 0x1F, 0x10, 0x1F,
219      0x00, 0x00, 0x00, 0x1F, 0x14,
220      0x00, 0x00, 0x00, 0xFC, 0x14,
221      0x00, 0x00, 0xF0, 0x10, 0xF0,
222      0x10, 0x10, 0xFF, 0x10, 0xFF,
223      0x14, 0x14, 0x14, 0xFF, 0x14,
224      0x10, 0x10, 0x10, 0x1F, 0x00,
225      0x00, 0x00, 0x00, 0xF0, 0x10,
226      0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
227      0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
228      0xFF, 0xFF, 0xFF, 0x00, 0x00,
229      0x00, 0x00, 0x00, 0xFF, 0xFF,
230      0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
231      0x38, 0x44, 0x44, 0x38, 0x44,
232      0xFC, 0x4A, 0x4A, 0x4A, 0x34, # sharp-s or beta
233      0x7E, 0x02, 0x02, 0x06, 0x06,
234      0x02, 0x7E, 0x02, 0x7E, 0x02,
235      0x63, 0x55, 0x49, 0x41, 0x63,
236      0x38, 0x44, 0x44, 0x3C, 0x04,
237      0x40, 0x7E, 0x20, 0x1E, 0x20,
238      0x06, 0x02, 0x7E, 0x02, 0x02,
239      0x99, 0xA5, 0xE7, 0xA5, 0x99,
240      0x1C, 0x2A, 0x49, 0x2A, 0x1C,
241      0x4C, 0x72, 0x01, 0x72, 0x4C,
242      0x30, 0x4A, 0x4D, 0x4D, 0x30,
243      0x30, 0x48, 0x78, 0x48, 0x30,
244      0xBC, 0x62, 0x5A, 0x46, 0x3D,
245      0x3E, 0x49, 0x49, 0x49, 0x00,
246      0x7E, 0x01, 0x01, 0x01, 0x7E,
247      0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
248      0x44, 0x44, 0x5F, 0x44, 0x44,
249      0x40, 0x51, 0x4A, 0x44, 0x40,
250      0x40, 0x44, 0x4A, 0x51, 0x40,
251      0x00, 0x00, 0xFF, 0x01, 0x03,
252      0xE0, 0x80, 0xFF, 0x00, 0x00,
253      0x08, 0x08, 0x6B, 0x6B, 0x08,
254      0x36, 0x12, 0x36, 0x24, 0x36,
255      0x06, 0x0F, 0x09, 0x0F, 0x06,
256      0x00, 0x00, 0x18, 0x18, 0x00,
257      0x00, 0x00, 0x10, 0x10, 0x00,
258      0x30, 0x40, 0xFF, 0x01, 0x01,
259      0x00, 0x1F, 0x01, 0x01, 0x1E,
260      0x00, 0x19, 0x1D, 0x17, 0x12,
261      0x00, 0x3C, 0x3C, 0x3C, 0x3C,
262      0x00, 0x00, 0x00, 0x00, 0x00  # #255 NBSP
263  ))
264  # fmt: on
265  
266  
267  if __name__ == "__main__":
268      with open("font5x8.bin", "wb") as outfile:
269          # Write a byte each for the character width, character height.
270          outfile.write(bytes((5, 8)))
271          # Now write all of the font character bytes.
272          for font_byte in FONT:
273              outfile.write(font_byte.to_bytes(1, "big"))