从 Python 3 中的单个位创建图像
Creating an image from single bits in Python 3
我用这个创建了一个位数组:
Data = []
Bytes = numpy.fromfile(filename, dtype = "uint8")
Bits = numpy.unpackbits(Bytes)
for b in Bits:
Data.append(b)
"filename" 以“.png”结尾。
稍后,我会用这些位做一些事情。我想用另一组(或相同的)位保存图像。我该怎么做?最好的选择是使用:saveToPNG(Data)
只需逆向执行所用的步骤,即可将这些位保存为 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 (Pillow) 将图像文件加载到 PIL Image 对象中; Numpy 可以从 PIL 图像创建一个数组。然后,您可以使用标准的 Numpy 工具来分析或操作原始图像数据,然后将其传回 PIL 以将其保存为 PNG(或各种其他图像文件格式)。有关示例,请参见 中的最终代码块。
我用这个创建了一个位数组:
Data = []
Bytes = numpy.fromfile(filename, dtype = "uint8")
Bits = numpy.unpackbits(Bytes)
for b in Bits:
Data.append(b)
"filename" 以“.png”结尾。
稍后,我会用这些位做一些事情。我想用另一组(或相同的)位保存图像。我该怎么做?最好的选择是使用:saveToPNG(Data)
只需逆向执行所用的步骤,即可将这些位保存为 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 (Pillow) 将图像文件加载到 PIL Image 对象中; Numpy 可以从 PIL 图像创建一个数组。然后,您可以使用标准的 Numpy 工具来分析或操作原始图像数据,然后将其传回 PIL 以将其保存为 PNG(或各种其他图像文件格式)。有关示例,请参见