如何用纯Python创建BMP文件?
我需要用纯Python 创建一个黑白BMP 文件。
我读了维基百科上的一篇文章,BMP 文件格式,但我不擅长低级编程,并且我想填补我的知识空白。
所以问题是,如何创建具有像素矩阵的黑白 BMP 文件?我需要使用纯 Python 来完成此操作,而不是使用任何像 PIL 这样的模块。这只是为了我的教育。
I need to create a black and white BMP file with pure Python.
I read an article on wikipedia, BMP file format, but I am not good at low level programming and want to fill this gap in my knowledge.
So the question is, how do I create a black and white BMP file having a matrix of pixels? I need to do this with pure Python, not using any modules like PIL. It is just for my education.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是单色位图的完整答案。
例如:
因此,将其编码为一系列行:
渲染它:
请注意,程序员有责任确保提供的每一行中都存在所需的字节数。
如果您想更改它们,则黑色在 \xff \xff \xff 中指定,白色在下面的 \x00 \x00 \x00 中指定。
This is a complete answer for monochrome bitmaps.
For example:
So, encoding this as a series of rows:
Render it with:
Note that it is the programmer's responsibility to ensure that the required number of bytes are present in each row supplied.
The black color is specified in the \xff \xff \xff and the white color is specified in the following \x00 \x00 \x00, should you want to change them.
construct 是一个纯 Python 库,用于解析和构建二进制结构、协议和文件格式。它具有开箱即用的 BMP 格式支持。
这可能是比使用 struct 手工制作更好的方法。此外,您将有机会学习一个真正有用的库(
construct
肯定是)construct is a pure-Python library for parsing and building binary structures, protocols and file formats. It has BMP format support out-of-the-box.
This could be a better approach than hand-crafting it with
struct
. Besides, you will have a chance to learn a really useful library (whichconstruct
certainly is)我在 Python 3 中实现了 24 位位图:
There is my implementation of 24-bit bitmap in Python 3:
您必须使用 Python 的 struct 模块来创建 BMP 文件所需的二进制标头。将图像数据本身保存在 bytearray 对象中 - bytearray 是一种鲜为人知的原生 Python 数据类型,其行为类似于 C 字符串:具有可变字节,在每个位置接受 0-255 之间的无符号数字,但仍然可以被打印并用作字符串(例如,作为 file.write 的参数)。
这是一个小程序,它使用 struct 和其他工具创建图像并将其编写为 TGA 文件,用纯 Python 编写,就像您想做的那样: http://www.python.org.br/wiki/ImagemTGA (它不使用字节数组,而是使用 python 数组模块(这也很有趣)
You have to use Python's
struct
module to create the binary headers the BMP file will need. Keep the image data itself in abytearray
object - bytearray is a little known native python data type that can behave like C strings: have mutable bytes which accept unsigned numbers from 0-255 in each position, still can be printed and used as a string (as an argument to file.write, for example).Here is a small program that uses struct and other tools to create an image and write it as a TGA file, in pure Python, just as you want to do: http://www.python.org.br/wiki/ImagemTGA (it does not make use of bytearrays, but python array module instead (which is also interesting)