gpt4 book ai didi

python - 如何使用纯 Python 创建 BMP 文件?

转载 作者:太空狗 更新时间:2023-10-29 18:17:24 25 4
gpt4 key购买 nike

我需要用纯 Python 创建一个黑白 BMP 文件。

我在维基百科上读了一篇文章,BMP file format , 但我不擅长底层编程,想填补我的知识空白。

所以问题是,如何创建具有像素矩阵的黑白 BMP 文件?我需要使用纯 Python 来执行此操作,而不是使用 PIL 等任何模块。这只是为了我的教育。

最佳答案

这是单色位图的完整答案。

import math, struct

mult4 = lambda n: int(math.ceil(n/4))*4
mult8 = lambda n: int(math.ceil(n/8))*8
lh = lambda n: struct.pack("<h", n)
li = lambda n: struct.pack("<i", n)

def bmp(rows, w):
h, wB = len(rows), int(mult8(w)/8)
s, pad = li(mult4(wB)*h+0x20), [0]*(mult4(wB)-wB)
s = li(mult4(w)*h+0x20)
return (b"BM" + s + b"\x00\x00\x00\x00\x20\x00\x00\x00\x0C\x00\x00\x00" +
lh(w) + lh(h) + b"\x01\x00\x01\x00\xff\xff\xff\x00\x00\x00" +
b"".join([bytes(row+pad) for row in reversed(rows)]))

例如:

FF XXXXXXXX
81 X......X
A5 X.X..X.X
81 X......X
A5 X.X..X.X
BD X.XXXX.X
81 X......X
FF XXXXXXXX

因此,将其编码为一系列行:

smile = [[0xFF], [0x81], [0xA5], [0x81], [0xA5], [0xBD], [0x81], [0xFF]]

渲染它:

bmp(smile, 8)

请注意,程序员有责任确保提供的每一行中都存在所需的字节数。

黑色在\xff\xff\xff 中指定,白色在后面的\x00\x00\x00 中指定,是否需要更改。

关于python - 如何使用纯 Python 创建 BMP 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8729459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com