首页 > 解决方案 > CMYK 数组写入文本(.txt)文件并从文件(.txt)读取并创建图像

问题描述

我正在尝试将图像转换为 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 中,大小 = 形状 [1],形状 [0]

IndexError:元组索引超出范围“

标签: numpypython-imaging-library

解决方案


我认为问题在于您只存储文件中所有像素的,但不保存图像的尺寸

所以,当你读回它时,如果你的图像是 8x10 像素,每个像素有 4 个 CMYK 值,你只会得到 8x10x4 值,这似乎是一个 320 元素的平面数组——而不是一个矩形图像。

我想您需要说明为什么要这样做,以及如果您想要更完整的答案,是否可以接受在文件开头存储图像尺寸。

然而,最接近的事情立即浮现在脑海numpy.savetxt("CMYK.txt", YourNumpyArray)中,这仅适用于一维或二维阵列,而您的阵列是 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')

推荐阅读