我意识到这是一个老问题,但我自己解决这个问题时发现了这个问题,我想这可能会在将来帮助别人。

实际上很容易将BMP文件读取为二进制数据。当然,这取决于你需要支持的范围有多广,需要支持的角落案例有多少。

下面是一个简单的解析器,它只适用于1920x1080 24位BMP(类似于从MS-Paint保存的)。但它应该很容易扩展。它以python列表的形式输出像素值,比如红色图像的(255, 0, 0, 255, 0, 0, ...)。

如果您需要更强大的支持,这里有一些关于如何正确读取这个问题的答案中的头的信息:How to read bmp file header in python?。使用这些信息,您应该能够使用所需的任何特性扩展下面的简单解析器。

如果你需要的话,维基百科上还有更多关于BMP文件格式的信息。def read_rows(path):

image_file = open(path, "rb")

# Blindly skip the BMP header.

image_file.seek(54)

# We need to read pixels in as rows to later swap the order

# since BMP stores pixels starting at the bottom left.

rows = []

row = []

pixel_index = 0

while True:

if pixel_index == 1920:

pixel_index = 0

rows.insert(0, row)

if len(row) != 1920 * 3:

raise Exception("Row length is not 1920*3 but " + str(len(row)) + " / 3.0 = " + str(len(row) / 3.0))

row = []

pixel_index += 1

r_string = image_file.read(1)

g_string = image_file.read(1)

b_string = image_file.read(1)

if len(r_string) == 0:

# This is expected to happen when we've read everything.

if len(rows) != 1080:

print "Warning!!! Read to the end of the file at the correct sub-pixel (red) but we've not read 1080 rows!"

break

if len(g_string) == 0:

print "Warning!!! Got 0 length string for green. Breaking."

break

if len(b_string) == 0:

print "Warning!!! Got 0 length string for blue. Breaking."

break

r = ord(r_string)

g = ord(g_string)

b = ord(b_string)

row.append(b)

row.append(g)

row.append(r)

image_file.close()

return rows

def repack_sub_pixels(rows):

print "Repacking pixels..."

sub_pixels = []

for row in rows:

for sub_pixel in row:

sub_pixels.append(sub_pixel)

diff = len(sub_pixels) - 1920 * 1080 * 3

print "Packed", len(sub_pixels), "sub-pixels."

if diff != 0:

print "Error! Number of sub-pixels packed does not match 1920*1080: (" + str(len(sub_pixels)) + " - 1920 * 1080 * 3 = " + str(diff) +")."

return sub_pixels

rows = read_rows("my image.bmp")

# This list is raw sub-pixel values. A red image is for example (255, 0, 0, 255, 0, 0, ...).

sub_pixels = repack_sub_pixels(rows)

python读取bmp图片_用Python读取bmp文件相关推荐

  1. python pypdf2另存为图片_用Python玩转PDF的各种骚操作

    文/Python数据科学  图片来源于网络 Portable Document Format(可移植文档格式),或者PDF是一种文件格式,可以用于跨操作系统的呈现和文档交换.尽管PDF最初是由Adob ...

  2. python 还原九宫格图片_用Python做一个好玩的朋友圈九宫格抽奖

    最近在朋友圈看到个好玩的抽奖九宫格: 随便点开一个: 设计思路 以朋友圈中看到的1号图做参考,我们需要准备 300*900 的白色底图,搞笑表情图,广告语,中间一个醒目的数字编号,外加下方的嘲讽&qu ...

  3. python显示gif图片_利用Python制作GIF图片

    #Python制作GIF图片 import imageio def create_gif(image_list, gif_name, duration = 0.1): ''' :param image ...

  4. python 查找损坏图片_使用Python查找损坏的图像

    python 查找损坏图片 赶上本系列: 第1部分:使用Python自动执行数字艺术家的重复任务 第2部分:针对数字艺术家的Python文件管理技巧 如果您正在计算机上处​​理图像,那么最终一定会遇到 ...

  5. python 读取pdf图片_使用Python从pdf中提取图像

    下面是一些使用pyPdf读取PDF文件.提取图像并将它们生成为PIL.Image的代码.你需要根据自己的需要修改它,这里只是演示如何遍历对象树.在import io import pyPdf impo ...

  6. python樱花树画法图片_用Python敲出樱花绽放 | 附代码

    今年武汉大学的樱花依然开得灿烂,但受疫情影响,少了很多去赏花的朋友. (图源 武汉大学微博) 为了让大家看到樱花开放,各路高手纷纷亮出了自己的绝技.要说最秀的,当属用Python让樱花开放. 一时间, ...

  7. python批量裁剪图片_用Python写了一个图片格式批量处理工具

    来源:blog.csdn.net/kimol_justdo 前言 就在昨天,正当我在刺激战场厮杀时,"叮叮叮",微信来消息了.我心想:"这是肾马情况?" 我打开 ...

  8. python 文本文件转图片_使用Python将文本转为图片

    编程派微信号:codingpy 文 / oldj 有时候,我们需要将文本转换为图片,比如发长微博,或者不想让人轻易复制我们的文本内容等时候.目前类似的工具已经有了不少,不过我觉得用得都不是很趁手,于是 ...

  9. python 过滤相似图片_求教 python 网站爬虫过滤出图片 url 的问题

    下面代码是在图片网站上截取的,想问下用 Python 爬虫,怎样才能过滤出 images 下面不同 size 的图片 url 呢? "images": [{ "size& ...

最新文章

  1. FTP与TFTP的区别
  2. 使用Java api 和 jni混合方式调用OpenCV
  3. strtus2改成springboot_jdk1.6环境下struts2改spring boot方案
  4. VTK:相互作用之Game
  5. java 延迟初始化_Java并发编程——延迟初始化占位类模式
  6. Java学习笔记29(IO字符流,转换流)
  7. 【HDU - 1937 】Finding Seats(二维前缀和+尺取法)
  8. mysql datetime 比较大小_【知识点】分布式事务数据库 —-MySQL 数据库开发规范(第一节)...
  9. java 缓存方法_Java实现一个简单的缓存方法
  10. 语音识别电路设计图集锦 - 嵌入式类电子电路图 - 电子发烧友网
  11. Mysql用户权限管理:Grank和Revoke
  12. adb interface 驱动问题(保证解决)
  13. 脱壳入门(一)之分析Aspack壳
  14. 【noi.ac #1759】ZYB的测验计划
  15. 【windows】win10如何安装使用bitlocker
  16. java opencsv 乱码_教你如何在Python中读,写和解析CSV文
  17. 云呐:资产密集型企业固定资产管理系统的基本功能特点
  18. 轻松搞定Linux环境变量
  19. Actor 分布式并行计算模型: The Actor Model for Concurrent Computation
  20. 计算机共享不了,电脑的共享开不了怎么办

热门文章

  1. UITableViewCell复用后,label上的字重叠的问题
  2. Java数据结构3_单链表 Linked List
  3. 响应时间过长而导致网页问题的原因?
  4. js验证身份证号码是否正确(整理)
  5. 【爬虫】使用beautifulsoup、requests爬取网页上的图片;循环爬取上市公司高管信息
  6. pytorch多模态实践基础
  7. 非科班程序员与科班程序员的区别在哪里?
  8. java arraylist 删除_Java ArrayList删除特定元素的方法
  9. python3.x 群发qq邮件
  10. chrome查看自己的应用_Google杀死了Chrome应用,但您可以轻松创建自己的应用