如何将包含图像数据的文本文件转换为图像?

1 投票
2 回答
1623 浏览
提问于 2025-04-18 13:27

我有一个文本文件,里面存储了一张图片的数据,这些数据是用十六进制的格式表示的。

12:0a:11:0b:08:18:0d:0e
0e:0c:14:12:0a:0d:10:0e
0f:12:0b:0e:0c:0e:0a:14
11:13:0c:0e:13:0e:0a:10
0e:0c:11:08:0c:0e:0f:0e
0c:0c:0b:12:06:10:0e:0e........and so on

这些数据是通过一个集成的串行摄像头(ucam)获取的。这张图片的尺寸是80x60,属于8位灰度的原始图像。我想把这些数据转换成一张图片。有没有什么好的方法可以用Python来实现这个?

2 个回答

0

如果你把文本形式的数据转换成原始的字节数据,就可以使用PIL库里的Image.fromstring这个方法把它变成一张图片。

from PIL import Image
values = [v for line in data.split() for v in line.split(':')]
bstr = ''.join(chr(int(v, 16)) for v in values)
im = Image.fromstring('L', (80, 60), bstr)
0

也许还有更好的解决办法,但我觉得可以用 PyGame 来实现。

因为只有部分数据,所以我重复使用这些数据来得到完整的 80x60 的图像。
如果有完整的数据,就需要进行一些更改。

data ='''12:0a:11:0b:08:18:0d:0e
0e:0c:14:12:0a:0d:10:0e
0f:12:0b:0e:0c:0e:0a:14
11:13:0c:0e:13:0e:0a:10
0e:0c:11:08:0c:0e:0f:0e'''

sf = pygame.Surface((80,60), depth=24)

x = 0
y = 0

for __ in range(120): # repeat the same data
    for row in data.splitlines():
        for pixel in row.split(':'):
            c = int(pixel,16)
            sf.set_at((x,y), pygame.Color(c,c,c))
            x += 1
            if x == 80:
                x = 0
                y += 1

pygame.image.save(sf, 'new.png')

你需要在屏幕上调整图像的大小,才能看到一些(灰色的)颜色。

在这里输入图像描述

撰写回答