1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
| from PIL import Image, ImageDraw import numpy as np
font_data = [ [0x7C, 0x62, 0x62, 0x7C, 0x60, 0x60, 0x60, 0x00], [0x78, 0x64, 0x62, 0x62, 0x62, 0x64, 0x78, 0x00], [0x3C, 0x42, 0x40, 0x3C, 0x02, 0x42, 0x3C, 0x00], [0x3C, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3C, 0x00], [0x7E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00], [0x7E, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x40, 0x00], [0x1E, 0x10, 0x10, 0x20, 0x10, 0x10, 0x1E, 0x00], [0x42, 0x42, 0x42, 0x5A, 0x7E, 0x66, 0x42, 0x00], [0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00], [0x00, 0x00, 0x42, 0x42, 0x5A, 0x7E, 0x42, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00], [0x42, 0x42, 0x42, 0x3C, 0x18, 0x18, 0x18, 0x00], [0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00], [0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x3E, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00], [0x18, 0x24, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00], [0x00, 0x00, 0x5C, 0x62, 0x40, 0x40, 0x40, 0x00], [0x00, 0x00, 0x3C, 0x42, 0x7E, 0x40, 0x3C, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00], [0x3C, 0x42, 0x40, 0x4E, 0x42, 0x42, 0x3E, 0x00], [0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00], [0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00], [0x02, 0x02, 0x34, 0x4A, 0x4A, 0x4A, 0x3E, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00], [0x18, 0x24, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00], [0x10, 0x10, 0x7E, 0x10, 0x10, 0x10, 0x0E, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00], [0x3E, 0x20, 0x20, 0x3C, 0x02, 0x02, 0x3C, 0x00], [0x10, 0x30, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00], [0x78, 0x10, 0x10, 0x08, 0x10, 0x10, 0x78, 0x00] ]
def create_led_display(font_data, scale=10, spacing=2, bg_color=(0, 0, 0), led_on=(255, 0, 0), led_off=(50, 0, 0)): """ 创建LED点阵显示图像
参数: - font_data: 字体数据列表 - scale: 每个LED点的缩放倍数 - spacing: LED点之间的间距 - bg_color: 背景颜色 - led_on: LED点亮颜色 - led_off: LED熄灭颜色 """
chars_per_row = 6 char_width = 8 char_height = 8
num_chars = len(font_data) rows = (num_chars + chars_per_row - 1) // chars_per_row
img_width = chars_per_row * (char_width * scale + spacing) + spacing img_height = rows * (char_height * scale + spacing) + spacing
img = Image.new('RGB', (img_width, img_height), bg_color) draw = ImageDraw.Draw(img)
for char_idx, char_data in enumerate(font_data): row = char_idx // chars_per_row col = char_idx % chars_per_row
x_start = spacing + col * (char_width * scale + spacing) y_start = spacing + row * (char_height * scale + spacing)
for y in range(char_height): byte_val = char_data[y] for x in range(char_width): pixel_on = (byte_val >> (7 - x)) & 1
led_x = x_start + x * scale led_y = y_start + y * scale
color = led_on if pixel_on else led_off draw.rectangle([led_x, led_y, led_x + scale - 1, led_y + scale - 1], fill=color)
if pixel_on and scale > 3: highlight_size = max(1, scale // 4) draw.ellipse([led_x, led_y, led_x + highlight_size, led_y + highlight_size], fill=(255, 200, 200))
return img
def create_binary_display(font_data, scale=10, spacing=2): """ 创建二进制显示图像(黑白版本) """ chars_per_row = 6 char_width = 8 char_height = 8
num_chars = len(font_data) rows = (num_chars + chars_per_row - 1) // chars_per_row
img_width = chars_per_row * (char_width * scale + spacing) + spacing img_height = rows * (char_height * scale + spacing) + spacing
img = Image.new('RGB', (img_width, img_height), (255, 255, 255)) draw = ImageDraw.Draw(img)
for char_idx, char_data in enumerate(font_data): row = char_idx // chars_per_row col = char_idx % chars_per_row
x_start = spacing + col * (char_width * scale + spacing) y_start = spacing + row * (char_height * scale + spacing)
for y in range(char_height): byte_val = char_data[y] for x in range(char_width): pixel_on = (byte_val >> (7 - x)) & 1
pixel_x = x_start + x * scale pixel_y = y_start + y * scale
color = (0, 0, 0) if pixel_on else (255, 255, 255) draw.rectangle([pixel_x, pixel_y, pixel_x + scale - 1, pixel_y + scale - 1], fill=color)
return img
led_img = create_led_display(font_data, scale=10) led_img.save("led_display.png")
binary_img = create_binary_display(font_data, scale=10) binary_img.save("binary_display.png")
print("图像已生成:led_display.png 和 binary_display.png")
|