检验是否为BMP格式文件

在看廖雪峰老师的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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值