如何读取TXT文件的二进制字符串并通过Python代码生成RGB图片
问题解决方法
一、读取TXT文件内容的实现
你的TXT内容为逗号分隔的8位二进制字符串,首尾附带空白字符,读取逻辑如下:
- 用
open()打开目标txt文件读取全部内容 - 调用
strip()清除首尾空白 - 调用
split(',')按逗号拆分,直接得到所有8位二进制串的列表,不需要原代码中的切片逻辑,避免把逗号、空白切到有效内容里。
代码示例:
from PIL import Image # 替换为你的TXT文件实际路径 with open('binary_data.txt', 'r', encoding='utf-8') as f: content = f.read().strip() # 拆分得到二进制串列表 vdiv = content.split(',')
二、全黑图片的原因和修复方案
错误原因
- 原字符串拆分逻辑错误,会把逗号、空白切到内容中,
diff函数遇到非0/1的字符会返回None,PIL处理空值时会默认渲染为黑色 - 四层嵌套循环逻辑错误:每个坐标的像素会被遍历所有二进制串的所有字符反复赋值,最终取值只和最后一个遍历的字符有关,自然无法得到正确结果。
修复后的完整代码
你需要的效果是每一行对应一个8位二进制串,每一列对应串中的一位,1显示黑色、0显示白色,对应逻辑调整如下:
from PIL import Image def diff(inp): if inp == '1': return (0,0,0) # 1对应黑色 elif inp == '0': return (255,255,255) # 0对应白色 # 异常值处理,避免空值导致的全黑问题,非0/1字符用红色标记方便排查 else: return (255,0,0) # 读取TXT文件 with open('binary_data.txt', 'r', encoding='utf-8') as f: content = f.read().strip() vdiv = content.split(',') # 新建图片:宽度固定8,高度等于二进制串的数量 img = Image.new('RGB', (8, len(vdiv)), "white") pixels = img.load() # 修复后的循环逻辑 for y in range(len(vdiv)): current_str = vdiv[y] for x in range(8): pixels[x, y] = diff(current_str[x]) img.show() # 如需保存可新增:img.save('result.png')
内容的提问来源于stack exchange,提问作者lena
相关产品推荐
相关产品推荐

