python读取bmp文件,在python 3中使用.bmp文件

这样做的简单方法是使用像

PIL/Pillow这样的第三方图像处理库.代码非常简单,您可以在几分钟内从

Image模块文档中的示例中找到它…

但是,如果您不允许这样做,那么让我们看一下如何手动执行此操作.

首先,BMP不是文本文件格式,它是二进制格式.这意味着你必须以二进制模式阅读它.并且你不能“逐行”地阅读它,因为它没有要读取的文本行.由于bytes对象不可变,因此您可能希望将其复制到bytearray中以便使用.所以:

with open('spam.bmp', 'rb') as f:

data = bytearray(f.read())

接下来,您需要解析BMP文件格式.我假设练习的要点是弄清楚如何自己做,所以我会给你一个链接到Wikipedia’s article,它比Microsoft文档更好地描述它,你可以从那里开始.

标准库中的struct模块对于解释标题非常有用;使用struct.unpack_from(‘< L',数据,偏移)读取32位小端数比读取数据[offset],数据[offset 1]等更容易并重新组合它们要容易得多成32位数. 我猜你可以忽略BMP压缩的所有选项 – 否则,这将是一个太难的任务.实际上,您可能只是假设所有标头都将指定最常见的变体,并且仅指定代码.但是你可能想问你的老师对此的反馈. 现在,一旦你找到了BMP的“像素阵列”部分,并且你已经想出如何从DIB标题解释它,你可以通过设置所需的位置将像素设置为白色. bytearray的适当索引.例如,它可能会变得如此简单:

pos = pixel_array_offset + row_size * y + pixel_size * x

data[pos:pos+3] = 255, 255, 255

最后,将红色像素更改为白色后,可以使用以下方法保存:

with open('eggs.bmp', 'wb') as f:

f.write(data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值