Создание изображения в Python из списка цветов пикселей, которые не создаются должным образом - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть список длиной 9 миллионов, который содержит кортежи, представляющие значение RGB.Пример: A = [(255, 255, 255), (0, 0, 0) .........., (0, 0, 0)]

Мне нужно создатьизображение в Python (размер: 3000 * 3000), где каждый кортеж в списке представляет один пиксель.Изображение должно содержать несколько черно-белых пикселей.

#However, using the code below I got an image with all pixels black. 

img = Image.new('1', (3000,3000))
img.putdata(A)
img.show()

Почему изображение не отражает белые пиксели?Ценю любую помощь.Спасибо!

1 Ответ

0 голосов
/ 01 декабря 2018

Есть много способов выполнить то, что вы ищете.Проблема в вашем коде заключается в том, что вы вводите одномерный массив в качестве входных данных.Чтобы решить эту проблему, просто преобразуйте ее в двумерный массив.

from PIL import Image
import numpy as np

long_list = [(255, 255, 255), (0, 0, 0) .......... , (0, 0, 0)]
img_size = 3000
array = np.array([long_list[img_size*i:img_size*(i+1)] for i in range(img_size)], dtype=np.uint8)

img = Image.fromarray(array)

img.save('output.png')

Другой способ заключается в работе с однопиксельным значением, используя два цикла for, например:

from PIL import Image

long_list = [(255, 255, 255), (0, 0, 0) .......... , (0, 0, 0)]

img_size = 3000 #int(sqrt(len(long_list)))

img = Image.new("RGB", (img_size,img_size))

pixels = img.load()

for x in range(img_size):
    for y in range(img_size):
        pixels[x,y] = long_list[img_size*x+y]


img.save("new.png")
...