在看廖雪峰老师的Python教程,常见内置模块 struct:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013994173393204e80af1f8fa94c8e9d094d229395ea43000
BMP格式采用小端方式存储数据,文件头的结构按顺序如下:
两个字节:’BM’表示Windows位图,’BA’表示OS/2位图;
一个4字节整数:表示位图大小;
一个4字节整数:保留位,始终为0;
一个4字节整数:实际图像的偏移量;
一个4字节整数:Header的字节数;
一个4字节整数:图像宽度;
一个4字节整数:图像高度;
一个2字节整数:始终为1;
一个2字节整数:颜色数。
练习:可以检查任意文件是否是位图文件,如果是,打印出图片大小和颜色数。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2017-05-31 19:53:52
# @Author : kk (zwk.patrick@foxmail.com)
# @Link : blog.csdn.net/PatrickZheng
import struct
# 传入文件路径,检查其是否bmp文件
def isBMP(path):
try:
# 使用unicode()对文件路径进行编码
# 为了识别中文路径
with open(unicode(path, 'utf-8'), 'rb') as f:
file = f.read(30)
#print file
result = struct.unpack('<ccIIIIIIHH', file)
#print result
if result[0] != 'B':
print '第一位:%s 不正确,不是bmp文件' % result[0]
else:
if (result[1] != 'M') and (result[1] != 'A'):
print '第二位:%s 不正确,不是bmp文件' % result[1]
else:
print '图片大小:%dx%d 颜色数:%d' % (result[6], result[7], result[9])
except IOError:
print '路径有误,请检查'
if __name__ == '__main__':
path = ''
while True:
path = raw_input('请输入文件路径:')
if path == '0' or path == 'exit':
break
isBMP(path)