我有一个RGB数据列表:
cdata=[R1, G1, B1, R2, G2, B2,..., Rn, Gn, Bn]
每个值都介于0到255之间。
我正在尝试使用Pillow 5.0.0将此数组重新构建为图像。 在Python 2下,我可以通过以下方式将值列表转换为字节字符串:
cdata2 = []
gidx = len(cdata)//3
bidx = len(cdata)//3*2
for i in range(len(cdata)//3):
cdata2.append(cdata[i])
cdata2.append(cdata[i+gidx])
cdata2.append(cdata[i+bidx])
data = ""
for c in cdata2:
data += chr(c)
im = Image.frombytes("RGB", (420, 560), data)
然后将'im'重新编码为base64,并在HTML模板中以PNG格式显示。
不幸的是,在Python 3中无法实现此功能,我遇到了如下错误:
UnicodeEncodeError: 'charmap' codec can't encode characters in position 42099-42101: character maps to <undefined>
此外,Pillow 5文档现在建议使用:
im = Image.open(StringIO(data))
但我不能使其与我上面构建的字符串一起工作。有没有更聪明的方法来做这个?非常感谢您的帮助。
bytearray
或可能的bytes
对象。Numpy是一个选项吗?为什么你的RGB值范围是0-254而不是0-255? - PM 2Ring