Есть много способов выполнить то, что вы ищете.Проблема в вашем коде заключается в том, что вы вводите одномерный массив в качестве входных данных.Чтобы решить эту проблему, просто преобразуйте ее в двумерный массив.
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")