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

TXT文件二进制值转换为JPEG图像触发TypeError错误如何解决

报错原因与修复方案

报错根因

  • diff函数异常分支无返回值:当输入的字符不是0/1时(比如你文件里的分隔逗号、换行符、空字符等),函数默认返回None,给像素赋值时None不符合颜色参数要求,直接触发TypeError: color must be int or tuple。
  • 文本解析逻辑错误:你的文件内容是逗号分隔的二进制字符串,直接遍历每行的所有字符会把逗号也当成像素值输入,得不到正确的0/1序列。
  • 像素赋值逻辑错误:四层循环会反复给同一个坐标的像素赋值,最终所有像素都会被最后一个字符的颜色覆盖,同时你创建的图像尺寸为(8, len(vdiv)),和你需要的120*160规格不符。

修复后代码

from PIL import Image

# 像素映射函数,异常值默认返回白色
def diff(inp):
    if inp == '1':
        return (0,0,0)
    elif inp == '0':
        return (255,255,255)
    else:
        return (255,255,255)

if __name__ == '__main__':
    # 读取文件按逗号拆分,过滤空值后收集所有二进制字符
    with open("C://Users//kk//Desktop//rbb8bin.txt", "r", encoding="utf-8") as file:
        content = file.read().strip()
    bin_str_list = content.split(",")
    pixel_bits = []
    for s in bin_str_list:
        s = s.strip()
        if s:
            pixel_bits.extend(list(s))
    
    # 校验像素数量是否符合120*160规格
    assert len(pixel_bits) == 120 * 160, f"像素数量不符,预期19200,实际得到{len(pixel_bits)}"
    
    # 创建图像并按顺序赋值像素
    img = Image.new('RGB', (120, 160), "white")
    pixels = img.load()
    idx = 0
    for y in range(160):
        for x in range(120):
            pixels[x, y] = diff(pixel_bits[idx])
            idx += 1
    
    img.show()
    # 可选:保存为JPEG文件
    # img.save("output.jpg")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:24:05