Построение картинки из массива

Надо RGBA пикселей записать в текстовый файл, изменить его и построить новую картинку.

По коду на вход подаётся массив, он записывается в файл, потом с файла обратно в массив, но картинку не строит. Массивы одинаковые. Если ставлю первый в построение картинки, то всё ок, а если второй (полученный из файла), то пустота.

Как можно исправить?

img = np.asarray(Image.open('im.png').convert('RGBA'))
print(img)# первый массив
    with open('4.txt', 'w') as f:
       for i in img:
          np.savetxt(f, i, fmt='%10d')
          f.write('\n')

img_1 = []
with open('4.txt') as f:
    lines = []
    while 1:
        aline = f.readline()
        if aline.strip():
            lines.append(aline)
        else:
            if len(lines) == 0:
                break
            img_1.append(np.loadtxt(lines, dtype=int))
            lines = []
data = np.array(img_1)# второй массив
print(data)
Image.fromarray(data,'RGBA').show()

Ответы (1 шт):

Автор решения: MaxU

А вам обязательно сохранять данные в текстовый файл? Это несколько усложняет задачу, т.к. вы хотите записывать N (N - число альфа каналов) 2D матриц в один текстовый файл.

Задачу можно значительно упростить и ускорить скорость выполнения если сохранять данные в бинарном виде:

img = np.asarray(Image.open('im.png').convert('RGBA'))
filename = r"/path/to/file.npy"
np.save(filename, img, allow_pickle=False)
...
img_loaded = np.load(filename, allow_pickle=False)

PS функции np.save/np.load, в отличие от функции np.savetxt, умеют работать с матрицами любой размерности.

→ Ссылка