python - 在 Python 3 中从单个位创建图像

标签 python image numpy png

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

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

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

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

最佳答案

只需颠倒您所使用的步骤即可将这些位保存为 PNG 文件。

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

我更改了您的变量名称,使它们符合 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(或各种其他图像文件格式)。请参阅 this answer 中的最终代码块举个例子。

关于python - 在 Python 3 中从单个位创建图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43615425/

相关文章:

python - 如何在Windows中将输出直接输出到python中的txt文件

python - Pandas 的大小和计数有什么区别?

python - python scipy.stats 中的 norm.ppf 与 norm.cdf

python - 从大型 MySQL 数据库中选择数据,其中一列的值在大量值列表中找到

Python 使用正则表达式从 Html 中选取文本

python - 在 Python 中将 RGB 图像转换为灰度图像

php - 亚马逊 S3 : How to use SEO-friendly URLs for Images

image - 如何确定 JVM 上任意格式(JPEG、PNG 等)图像文件的尺寸?

python - 重新格式化文本文件,以便它可以在 python 中使用 numpy 数组?

python - 带有 args 的子进程调用仅读取第一个 arg