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

时间:2014-07-15 19:07:03

标签: python image python-imaging-library

我有一个文本文件,其中包含十六进制格式的图像数据(1张图片)。

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位灰度RAW图像。我想将数据转换为图像。任何想法如何在Python中做到这一点?

2 个答案:

答案 0 :(得分: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')

您必须在屏幕上调整图像大小才能看到一些(灰色)颜色

enter image description here

答案 1 :(得分: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)