python – 使用PIL将二进制字符串转换为图像

python – 使用PIL将二进制字符串转换为图像,第1张

概述所以,我要做的是让PIL根据二进制字符串创建一个图像. 一些背景故事: from PIL import Imagevalue = "0110100001100101011011000110110001101111"vdiv = [value[i:i+8] for i in range(0, len(value), 8)] ^这将从二进制字符串中创建一个字节列表. [‘01101000′,’0 所以,我要做的是让PIL根据二进制字符串创建一个图像.
一些背景故事:

from PIL import Imagevalue = "0110100001100101011011000110110001101111"vdiv = [value[i:i+8] for i in range(0,len(value),8)]

^这将从二进制字符串中创建一个字节列表. [‘01101000′,’01100101’,…..]

def diff(inp):    if inp == '1':        return (0,0)    if inp == '0':        return (255,255,255)    else:        pass

^这会返回每个相应位的颜色元组,如果我调用:

for i in vdiv:    for i2 in i:        print diff(i2)

它将为列出的字节中的每个位打印每个颜色元组. (0,0)(0,0)(255,255)……

我想知道的是,如何让PIL创建像素与二进制字符串匹配的图像?

这是它应该是什么样子:

到目前为止我对PIL的看法:

img = Image.new( 'RGB',(8,len(vdiv)),"white")pixels = img.load()##for x in range(img.size[0]):    for y in range(img.size[1]):        for i in vdiv:            for i2 in i:                pixels[x,y] = diff(i2) #Creates a black image. What do?##img.show()

它是我在范围内的x位.我搞不清楚了.

解决方法 你可以使用img.putdata:

import Imagevalue = "0110100001100101011011000110110001101111"cmap = {'0': (255,255),'1': (0,0)}data = [cmap[letter] for letter in value]img = Image.new('RGB',len(value)//8),"white")img.putdata(data)img.show()

如果你有NumPy,你可以使用Image.fromarray:

import Imageimport numpy as npvalue = "0110100001100101011011000110110001101111"carr = np.array([(255,(0,0)],dtype='uint8')data = carr[np.array(map(int,List(value)))].reshape(-1,8,3)img = Image.fromarray(data,'RGB')img.save('/tmp/out.png','PNG')

但是这个timeit测试建议使用putdata更快:

value = "0110100001100101011011000110110001101111"*10**5def using_fromarray():    carr = np.array([(255,dtype='uint8')    data = carr[np.array(map(int,3)    img = Image.fromarray(data,'RGB')    return imgdef using_putdata():    cmap = {'0': (255,0)}    data = [cmap[letter] for letter in value]    img = Image.new('RGB',"white")    img.putdata(data)    return img
In [79]: %timeit using_fromarray()1 loops,best of 3: 1.67 s per loopIn [80]: %timeit using_putdata()1 loops,best of 3: 632 ms per loop
总结

以上是内存溢出为你收集整理的python – 使用PIL将二进制字符串转换为图像全部内容,希望文章能够帮你解决python – 使用PIL将二进制字符串转换为图像所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存