web-dev-qa-db-fra.com

Comment puis-je écrire un tableau binaire sous forme d'image en Python?

J'ai un tableau de nombres binaires en Python:

data = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1...]

Je voudrais extraire ces données et les enregistrer en tant que bitmap, avec un "0" correspondant au blanc et un "1" correspondant au noir. Je sais qu'il y a 2500 numéros dans le tableau, correspondant à un bitmap 50x50. J'ai téléchargé et installé PIL, mais je ne sais pas comment l'utiliser à cette fin. Comment puis-je convertir ce tableau dans l'image correspondante?

10
interplex

Les méthodes numpy et matplotlib seraient les suivantes:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
plt.imsave('filename.png', np.array(data).reshape(50,50), cmap=cm.gray)

Voir this

7
CT Zhu

Vous pouvez utiliser Image.new avec 1 mode et placer chaque entier sous forme de pixel dans votre image initiale:

>>> from PIL import Image
>>> import random

>>> data = [random.choice((0, 1)) for _ in range(2500)]
>>> data[:] = [data[i:i + 50] for i in range(0, 2500, 50)]
>>> print data
[[0, 1, 0, 0, 1, ...], [0, 1, 1, 0, 1, ...], [1, 1, 0, 1, ...], ...]

>>> img = Image.new('1', (50, 50))
>>> pixels = img.load()

>>> for i in range(img.size[0]):
...    for j in range(img.size[1]):
...        pixels[i, j] = data[i][j]

>>> img.show()
>>> img.save('/tmp/image.bmp')

 enter image description here

15
ozgur
import scipy.misc
import numpy as np
data = [1,0,1,0,1,0...]
data = np.array(data).reshape(50,50)
scipy.misc.imsave('outfile.bmp', data)
3
Back2Basics

Pas pour tableau binaire

Si vous avez données binaires dans ce format - b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00..., vous pouvez utiliser cette méthode pour l'écrire sous forme de fichier image:

with open("image_name.png", "wb") as img:
    img.write(binary_data)
0
Shanid