gpt4 book ai didi

python - 在 python 3 中使用 .bmp 文件

转载 作者:太空狗 更新时间:2023-10-29 19:35:58 26 4
gpt4 key购买 nike

我有一个 bmp 文件。它只是一个红色方 block 。我必须编写一个具有使它具有白色条纹的功能的程序。我需要做的事情:

  • 加载 bmp 文件。
  • 阅读并评估 bmp 文件。
  • 将文件的某些区域坐标编码为白色。
  • 关闭文件
  • 将最终产品文件显示为输出

我是新手,读取或显示原始bmp文件都困难重重,更不用说编辑里面的内容了。它与打开 txt 文件和“readline()”不同。另外,当我在 eclipse 的 pydev 项目 src 文件夹中复制粘贴 bmp 文件时,它不会显示在 eclipse 上,所以我不知道计算机是否会识别该文件。我想在发帖之前仔细阅读它,但我似乎没有得到太多谷歌搜索结果,因为我不确定我应该搜索什么。

最佳答案

执行此操作的简单方法是使用第三方图像处理库,例如 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', data, offset) 读取 32 位小端数字要容易得多比阅读 data[offset] , data[offset+1]等,并将它们重新组合成一个 32 位数字。

我猜你可以忽略 BMP 压缩的所有选项——否则,这将是一项太难的任务。事实上,您可能只是假设所有 header 都将指定最常见的变体,并且只指定该变体的代码。但您可能想就此向您的老师征求反馈意见。

现在,一旦找到 BMP 的“像素阵列”部分,并且知道如何从 DIB header 中解释它,就可以通过设置字节数组适当索引处的值。例如,结果可能很简单:

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)

关于python - 在 python 3 中使用 .bmp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20276458/

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