CMYK массив записывает в текстовый (.txt) файл и читает из файла (.txt) и создает изображение - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь преобразовать изображение в массив cmyk и записать этот массив в текстовый файл.Когда я читаю из того же файла и пытаюсь отобразить его, появляется ошибка.Я думаю, что сделал какую-то ошибку, но не могу найти решение.Код ниже:

from PIL import Image
import numpy as np

imgs = Image.open('rgb.jpg').convert('CMYK')    
imgs_image = np.array(imgs)
str2 =str(imgs_image)
f=open("rgb_real_cmyk.txt","w")
f.write(str2)
f.close()

fh = open("rgb_real_cmyk.txt","r") 
string=fh.read()
file_image = np.array(string)
file_test = Image.fromarray(file_image, mode='CMYK')
file_test.save("file_image.jpeg")

Ошибка:

"в fromarray size = shape [1], shape [0]

IndexError: индекс кортежа вне диапазона"

1 Ответ

0 голосов
/ 22 октября 2018

Я думаю, что проблема в том, что вы сохраняете только значения всех пикселей в вашем файле, но вы не сохраняете размеры изображения.

Итак, когда вы читаете его обратно, если ваше изображение было 8x10 пикселей с 4 значениями CMYK каждое, вы просто получаете значения 8x10x4, которые выглядят как плоский массив из 320 элементов, а не прямоугольное изображение.

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

Ближайшая вещь, которая сразу приходит на ум - это numpy.savetxt("CMYK.txt", YourNumpyArray), но только для 1-D или 2-D массивов, а у вас 3-D.Вероятно, самое простое решение - , как показано здесь .


Я полагаю, вы знаете, что вы можете сохранить изображение CMYK в виде TIF-файла, который можно легко просмотреть ...

#!/usr/local/bin/python3
from PIL import Image
import numpy as np

img = Image.open('rgb.jpg').convert('CMYK')    
img.save('result.tif')
...