在Python3中从单个位创建图像

2024-04-19 15:09:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用以下方法创建了位数组:

Data = []
Bytes = numpy.fromfile(filename, dtype = "uint8")
Bits = numpy.unpackbits(Bytes)
for b in Bits:
    Data.append(b)

“文件名”以“.png”结尾。在

以后,我用这些东西做一些事情。我想用另一组(或相同的)位来保存图像。我该怎么做?最好的选择是使用:saveToPNG(Data)


Tags: 方法innumpyfordatabytes文件名数组
1条回答
网友
1楼 · 发布于 2024-04-19 15:09:24

您可以将这些位保存为一个PNG文件,方法是简单地反转您所使用的步骤。在

顺便说一句,不需要创建Data列表:可以使用普通的Python函数和运算符以及Numpy访问Bits数组中的位。但是如果您真的希望这些位在一个纯Python列表中,那么就不需要慢for ... append循环:只需将数组传递给list构造函数。在

我已经更改了变量名,使它们符合PEP-8样式指南。在

import numpy as np

# File names
in_name = 'square.png'
out_name = 'square_out.png'

# Read data and convert to a list of bits
in_bytes = np.fromfile(in_name, dtype = "uint8")
in_bits = np.unpackbits(in_bytes)
data = list(in_bits)

# Convert the list of bits back to bytes and save
out_bits = np.array(data)
print(np.all(out_bits == in_bits))
out_bytes = np.packbits(out_bits)
print(np.all(out_bytes == in_bytes))
out_bytes.tofile(out_name)

但是,我不知道你为什么要这么做。如果您想访问PNG文件中的图像数据,则需要对其进行正确解码。一种简单的方法是使用PIL(pill)将图像文件加载到PIL-image对象中;Numpy可以从PIL图像生成数组。然后,您可以使用标准的Numpy工具来分析或操作原始图像数据,然后将其传递回PIL以将其保存为PNG(或其他各种图像文件格式)。有关示例,请参见this answer中的最后一个代码块。在

相关问题 更多 >