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
相关产品推荐
相关产品推荐

