我正在尝试将图像转换为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中 大小= shape [1],shape [0]
IndexError:元组索引超出范围”
答案 0 :(得分:0)
我认为问题在于您仅存储文件中所有像素的值,而没有保存图像的尺寸。
因此,当您将其读回时,如果您的图像是8x10像素,每个像素有4个CMYK值,那么您只会得到8x10x4值,它看起来像是320个平面元素数组,而不是矩形图像。
我想您需要说为什么,并且如果需要更完整的答案,是否可以接受在文件开头存储图像尺寸。
最容易想到的是numpy.savetxt("CMYK.txt", YourNumpyArray)
,但是仅适用于一维或二维数组,而您的是3-D数组。最简单的解决方案可能是as shown here。
我想您知道您可以将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')