返回 2026-04-18
🛠 工具 / 开源

5x5像素字体:专为极小屏幕设计的最小可读字体5x5 Pixel font for tiny screens

maurycyz.com·2026-04-18

该项目推出了一款仅占5×5像素的嵌入式字体(mcufont),专为资源受限的微控制器显示设计。该字体在6×6网格内安全渲染所有字符,是确保可读性的最小尺寸——2×2至4×4像素均无法清晰呈现字母如E、M或W。其设计灵感源自lcamtuf的5x6-inline.h字体和ZX Spectrum的8x8字体,实现了极致紧凑与视觉辨识度的平衡。

所有字符都适合放在5像素见方的空间内,并且可以安全地绘制在6x6的网格上。该设计基于lcamtuf的5x6字体inline.h,而后者又受到ZX Spectrum 8x8字体的启发。

5x5是保持可读性的最小尺寸:

  • 2x2:不可能。
  • 3x3:技术上可行,但无法阅读。
  • 4x4:不足以正确绘制“E”、“M”或“W”。
  • 5x5:就是这个字体。
  • 五乘五实际上足够大,可以绘制比大写字母小一像素的小写字母,使它们在视觉上明显区分开来。

    更窄的4x5和3x5尺寸是可能的,但需要牺牲“M”、带点的零,并降低“U/V/Y”之间的区别度。

    并非因为少数几个字符必须如此就存在艺术上的理由让所有字符都是五像素宽……但使用固定宽度会让编程变得容易得多:屏幕上字符串的长度始终是字符数的6倍。

    这也使得紧凑布局更加安全:无需担心数字会溢出,因为“8978”并不比“1111”长。

    整个字体仅占用350字节内存,非常适合像AVR128DA28(16kB RAM)这样的8位微控制器。这些设备便宜、低功耗且坚固耐用……但在图形方面却力不从心:

    即使是低分辨率的384x288显示屏也有11万个像素点:远远超出了AVR芯片的内存容量。

    ...不过大多数项目其实并不需要那么多像素。160x128或128x64 OLED屏幕更实用也更便宜——但这些屏幕需要手绘、像素高效的字体才能充分发挥其优势。

    作为参考,这里是一个类似比例下的矢量字体渲染效果:

    抗锯齿处理、数兆字节的代码、一兆字节的字体数据,与350个手工制作的字节相比仍然糟糕透顶。

    真实像素:

    像素并非完美的正方形,因此该字体实际显示效果不会像帖子顶部渲染的那样:这就是它在真实屏幕上的样子:

    我其实很喜欢由子像素产生的伪阴影效果。单色显示器不会出现这种情况,但该字体看起来仍会比你想象的更平滑。

    像素间的空隙确实有助于突出“e”和“g”,同样的效果也应适用于……

    更小的字体:

    虽然5x5是最小无妥协分辨率,但3x5也不算太差:

    “M”、“W”和“Q”受到影响,但仍能清晰识别“O”和零。如果你需要将显示列数增加50%,这种方案可能是个不错的选择。

    这仍然是可以阅读的,那么3x4呢?

    在此尺寸下无法同时拥有大小写字母的区别,因此我选择了在有限空间内效果最好的样式。数字也受到一定影响,但基本还能用。

    那3x3呢?

    主要损失在于数字部分,但字母没有重复且仍可辨认。

    在真实硬件上显示后,该字体有了巨大改进:

    这意味着它还是太大了。那2x3呢?

    好吧,这已经离谱了。大多数字母都无法识别,而且有很多重复字符。如果你没看出来,底部一行写着“Hello World”。

    将纵横比调整为3x2后情况好多了:

    更多字母(如M、W、N、Q、G、P等)具有水平细节而非垂直细节。底部一行写着“you can probably read this”,不过你可能需要眯眼或缩小视图才能看清。

    ...为了完整性,这是2x2的情况:

    理论上共有16种可能的2x2图像,但其中一种是空白,另外5种是另一种图像的偏移副本。 这样就只剩下10种,刚好够表示所有数字……但由于它们与原始数字毫无相似之处,与其说是字体,不如说更像一种秘密代码。

    相关:

  • /projects/mcufont/mcufont.h: 5x5 字体定义。
  • /projects/mcufont/test.c: 预览该字体的程序。
  • https://lcamtuf.coredump.cx/soft/embedded/font-inline.h: 原始字体文件。
  • https://moonbench.xyz/projects/tiny-pixel-art-fonts/: 更多微型像素字体。
  • 需要完整排版与评论请前往来源站点阅读。