如何读取二进制文件并将数据转换为图像?

Hus*_*ien 7 python binary python-imaging-library

基本上我想要做的是获取一个文件,将其二进制数据(当然是十进制)放入列表中,然后使用基于该列表的 PIL 生成灰度位图图像。

例如,如果文件为 5000 字节(图像大小为 100 x 50),并且每个字节都是 0 到 255 之间的整数,我想将第一个字节绘制到第一个像素,然后沿着行向下,直到所有字节都用完。

到目前为止我唯一得到的就是读取文件:

f = open(file, 'rb')
text = f.read()
for s in text:
    print(s)
Run Code Online (Sandbox Code Playgroud)

这会以十进制输出字节。

我正在寻找如何实现这一目标的方向。我做了很多搜索,但似乎没有太多人尝试做我想做的事情。

任何帮助将不胜感激!

Mar*_*ell 5

您可以使用 Numpyfromfile()来有效地读取它:

#!/usr/bin/env python3

import numpy as np
from PIL import Image

# Define width and height
w, h = 50, 100

# Read file using numpy "fromfile()"
with open('data.bin', mode='rb') as f:
    d = np.fromfile(f,dtype=np.uint8,count=w*h).reshape(h,w)

# Make into PIL Image and save
PILimage = Image.fromarray(d)
PILimage.save('result.png')
Run Code Online (Sandbox Code Playgroud)

关键词:PIL、Pillow、Python、Numpy、读取原始、二进制、8 位、灰度灰度、图像、图像处理。


Ble*_*der 3

我不认为使用 PIL 会非常有效,但你可以看看ImageDraw我不认为使用 PIL 来实现这一点会非常有效,但如果您想在空白画布上绘画,

我的方法会有点不同:由于您的文件格式与Netpbm格式非常相似,因此我会尝试对其进行转换。为简单起见,请尝试在读取格式时添加/操作格式的标头,以便 PIL 可以本机读取它。