You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python3生成264*176分辨率Bitmap字符串图像用于电子墨水屏?

Python3实现将字符串转为264×176分辨率的Bitmap(适配电子墨水屏)

嘿,我懂你要给电子墨水屏生成指定尺寸Bitmap文本图的需求——毕竟墨水屏的显示限制确实有点磨人,尤其是不能横向显示文本这点。我之前也折腾过类似的场景,踩过几个小坑,给你整理了一个能用的PIL方案(应该能解决你之前没成功的问题),完全适配墨水屏的特性:

第一步:安装依赖

首先确保你装了PIL的最新版(现在叫Pillow),终端里跑这个命令:

pip install pillow --upgrade

第二步:完整实现代码

这个代码会生成264×176分辨率、白色背景、黑色竖排文本的Bitmap,完美适配你的需求:

from PIL import Image, ImageDraw, ImageFont

def text_to_eink_bitmap(text, output_path="eink_text.bmp", font_path=None):
    # 固定目标分辨率:宽264,高176
    WIDTH, HEIGHT = 264, 176
    # 创建单通道黑白图像("1"模式是墨水屏最常用的1bit格式,白色背景)
    img = Image.new("1", (WIDTH, HEIGHT), 255)
    draw = ImageDraw.Draw(img)

    # 设置字体:优先用你指定的字体,没有就用系统默认字体
    # 字号可以根据你的需求调整,这里设20是适配176高度的折中值
    if font_path:
        font = ImageFont.truetype(font_path, size=20)
    else:
        font = ImageFont.load_default(size=20)

    # 处理文本竖排:因为屏幕不能横向显示,每个字符单独占一行
    # 计算行高(字符高度+5像素间距),确保文本不会超出图像高度
    char_height = font.getsize("A")[1]
    line_height = char_height + 5
    max_allowed_chars = HEIGHT // line_height

    # 如果文本太长,自动截断(也可以改成换行,按需调整)
    if len(text) > max_allowed_chars:
        text = text[:max_allowed_chars]
        print(f"文本过长,已自动截断为{max_allowed_chars}个字符")

    # 计算居中位置,让文本在图像里居中显示
    x_center = (WIDTH - font.getsize(text[0])[0]) // 2 if text else WIDTH // 2
    y_start = (HEIGHT - len(text) * line_height) // 2

    # 逐个绘制字符
    for idx, char in enumerate(text):
        draw.text(
            (x_center, y_start + idx * line_height),
            char,
            font=font,
            fill=0  # 黑色文本,墨水屏显示清晰
        )

    # 保存为Bitmap格式
    img.save(output_path, format="BMP")
    print(f"Bitmap图像已成功保存到:{output_path}")

# 示例调用
if __name__ == "__main__":
    # 替换成你要显示的字符串
    your_text = "Hello 电子墨水屏测试"
    # 如果需要用自定义字体(比如支持中文的思源黑体),可以指定路径,比如:
    # text_to_eink_bitmap(your_text, font_path="./SourceHanSansCN-Normal.ttf")
    text_to_eink_bitmap(your_text)

关键细节说明(解决你之前可能踩的坑)

  • 单通道图像模式:用"1"模式创建图像,而不是默认的RGB,这是墨水屏适配的核心——RGB图像会被墨水屏转换,容易出现显示异常,1bit黑白格式直接匹配墨水屏的显示逻辑
  • 竖排文本处理:因为屏幕无法横向显示文本,代码自动把每个字符单独一行,完全避免横向文本的问题
  • 边界控制:自动计算文本的最大长度,防止超出176的高度限制,同时做了居中对齐,视觉效果更好
  • 字体兼容:如果是中文文本,记得指定支持中文的字体文件,不然默认字体可能显示乱码

常见问题排查

如果你之前用PIL没成功,大概率是这几个原因:

  • 没使用"1"模式创建图像,导致保存的BMP是彩色格式,墨水屏不兼容
  • 文本排版超出了图像尺寸,导致部分内容被截断或者显示不全
  • 保存时没指定format="BMP",PIL可能默认保存成其他格式

内容的提问来源于stack exchange,提问作者YaddyVirus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:36:30