[Python]:热血传奇-Wzl,Wzx的解析

         首先我们要了解,wzl与wzx的对应关系,wzx里面存的是每张二进制图片数据在wzl中的偏移量,所以取到wzx中的偏移数据就可以取到wzl每张图片数据,其实就这么简单。

1[取wzx中偏移量数据]:以素材[hum.wzx]为例进行解析

-读取前44字节为wzx头文件,对解析无作用不做处理

-读取44至48字节代表为,[wzx中偏移值总数量] [int类型] [4字节]

-读取48字节以后,每4个字节[int类型]为一个图片的偏移量

    with open('hum.wzx', 'rb') as wzx_file:
        wzx_file.seek(44)  # 指针指向44字节位置
        wzx_data = wzx_file.read(4)  # 读取4字节数据
        image_number = struct.unpack('I', wzx_data)[0]  # 解析出图片的总数量数量
        image_data = []  # 定义空数组准备接收for循环里面获取到的偏移值
        for i in range(image_number):  # 根据总数量来决定取要在wzx中获取多少条数据
                wzx_file.seek(48 + (i * 4))  # 从48字节开始 每次指针偏移4字节
                wzx_data = wzx_file.read(4)  # 每次读取4字节
                num = struct.unpack('I', wzx_data)[0]  # 取到每个图片在wzl中的偏移量
                image_data.append(num)# 将每一个偏移值存入image_data 数组

2.[取wzl中图片偏据]:根据wzx中取得数据对[hum.wzl]进行解析:

-根据在wzx中取得的偏移值总数量,每张图片偏移值在wzl中取图片数据

-从44字节-48字节 int类型 代表[图片总数量]

-根据wzx中取得的偏移量数组来定位指针,取指针后16字节为一个图片结构体

结构体为 [Byte][Byte][Byte][Byte][short][short][short][short][int]

通过struct.unpack('BBBBhhhhI',read(16))来将二进制数据流解析

        with open('hum.wzl', 'rb') as wzl_file:
            for i in image_data:      # 遍历偏移量数组来对wzl取数据
                wzl_file.seek(i)    # 定位偏移值
                pixelFormat, compressed, reserve, compressLevel, width, height, x, y, size = struct.unpack('BBBBhhhhI', wzl_file.read(16))  # 解析取到图片结构体
                # print("像素格式:", pixelFormat)
                # print("压缩:", compressLevel)
                # print("预留:", reserve)
                # print("压缩等级:", compressLevel)
                # print("图片宽度:", width)
                # print("图片高度:", height)
                # print("X坐标:", x)
                # print("Y坐标:", y)
                # print("图片二进制数据长度:", size)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值