FONT_PATH = 'DinkieBitmap-7pxDemo.ttf' GRID_SIZE = 7 GRID_PADD = 1 UNIC_FIRS = '4E00' UNIC_LAST = '9FFF' from PIL import Image, ImageDraw, ImageFont first = int(UNIC_FIRS, base=16) last = int(UNIC_LAST, base=16) im_width = (GRID_SIZE + GRID_PADD * 2) * 16 im_height: int = int((GRID_SIZE + GRID_PADD * 2) * ((last - first + 1) / 16)) im = Image.new('RGB', (im_width, im_height), color='#FFFFFF') draw = ImageDraw.Draw(im) font = ImageFont.truetype(FONT_PATH, GRID_SIZE, encoding='utf-8') x, y = 0, 0 for i in range(first, last + 1): if y == 16: x = x + 1 y = 0 draw.text(((GRID_SIZE + GRID_PADD * 2) * y + GRID_PADD, (GRID_SIZE + GRID_PADD * 2) * x + GRID_PADD), chr(i), '#000000', font=font) y = y + 1 im.save(f'U+{UNIC_FIRS}.png')