WZL和WZX的文件对应关系
传奇客户端的图片素材存储在Data目录下,新版客户端使用WZL和WZX这对文件来替代旧版的WIL和WIX。WZX是索引文件,里面记录的是每张图片数据在WZL文件中的偏移位置。WZL是实际的数据文件,存放所有图片的二进制内容。解析的时候先读WZX拿到每张图片的起始偏移量,再根据偏移量去WZL里定位并读仍应的图片数据。
WZX文件头结构解析
打开WZX文件后,前44个字节是固定的头信息,这部分对解析图片数据没有作用,直接跳过。从第44字节开始往后数4个字节,这4个字节代表WZX中记录的偏移值总数量,也就是这个素材包一共有多少张图片。数据类型是int,字节序低位在前。读完这48个字节之后,剩下的部分每4个字节为一组,每组代表一张图片在WZL文件中的起始偏移位置。
WZL文件头结构解析
WZL文件的前44个字节同样是固定的文件头,包含一些元信息,可以直接跳过。文件头的具体字段目前没有完全公开,已知其中包含图片数量ImageCount,但实际解析时发现WZL里出现的图片数量不一定等于这个字段记录的数字,所以更准确的做法是以WZX中记录的偏移数量为准。文件头的第44字节之后还有12个字节,这部分与控制帧播放速度、是否重复播放等信息有关,解析时不需要处理。
单张图片的数据结构
根据WZX提供的偏移量定位到WZL文件的对应位置后,开始读取单张图片的数据。每张图片的数据由两部分组成:图片头描述信息和图片二进制数据流。
图片头描述信息的结构如下:
-颜色位深,用于指定图片的像素格式
-3个字节的未知字段,目前用途不明
-图片宽度,SmallInt类型,2个字节
-图片高度,SmallInt类型,2个字节
-X轴偏移量,SmallInt类型,2个字节
-Y轴偏移量,SmallInt类型,2个字节
-压缩后图片数据的长度,该值大于0时表示数据经过压缩处理
图片头之后紧跟着的就是图片的二进制数据流。原始图片是8位色深的位图数据,包含调色板信息,调色板大小为256乘4个字节。实际解析时需要根据像素格式和长度字段来读取数据,再结合调色板还原成可见的图片。
Python解析的注意事项
编写解析脚本时先把WZX文件以二进制方式打开,读取前48个字节,取出图片总数,然后循环读取剩余部分获取每张图片的偏移地址。拿到偏移地址列表之后去打开WZL文件,seek到对应位置,读取图片头信息,根据宽度高度和长度字段提取出图片数据。数据有可能是压缩过的,需要判断Length字段是否大于0再做相应处理。
解析出来的原始数据是8位色深的位图,需要配合调色板才能正确显示,否则颜色会完全不对。调色板位于WZL文件头之后、第一张图片数据之前,共1024个字节。如果只想快速查看素材内容而不写完整的解析器,可以直接用WIL编辑器这类现成工具,支持批量导出和导入操作。
传奇客户端的图片素材存储在Data目录下,新版客户端使用WZL和WZX这对文件来替代旧版的WIL和WIX。WZX是索引文件,里面记录的是每张图片数据在WZL文件中的偏移位置。WZL是实际的数据文件,存放所有图片的二进制内容。解析的时候先读WZX拿到每张图片的起始偏移量,再根据偏移量去WZL里定位并读仍应的图片数据。
WZX文件头结构解析
打开WZX文件后,前44个字节是固定的头信息,这部分对解析图片数据没有作用,直接跳过。从第44字节开始往后数4个字节,这4个字节代表WZX中记录的偏移值总数量,也就是这个素材包一共有多少张图片。数据类型是int,字节序低位在前。读完这48个字节之后,剩下的部分每4个字节为一组,每组代表一张图片在WZL文件中的起始偏移位置。
WZL文件头结构解析
WZL文件的前44个字节同样是固定的文件头,包含一些元信息,可以直接跳过。文件头的具体字段目前没有完全公开,已知其中包含图片数量ImageCount,但实际解析时发现WZL里出现的图片数量不一定等于这个字段记录的数字,所以更准确的做法是以WZX中记录的偏移数量为准。文件头的第44字节之后还有12个字节,这部分与控制帧播放速度、是否重复播放等信息有关,解析时不需要处理。
单张图片的数据结构
根据WZX提供的偏移量定位到WZL文件的对应位置后,开始读取单张图片的数据。每张图片的数据由两部分组成:图片头描述信息和图片二进制数据流。
图片头描述信息的结构如下:
-颜色位深,用于指定图片的像素格式
-3个字节的未知字段,目前用途不明
-图片宽度,SmallInt类型,2个字节
-图片高度,SmallInt类型,2个字节
-X轴偏移量,SmallInt类型,2个字节
-Y轴偏移量,SmallInt类型,2个字节
-压缩后图片数据的长度,该值大于0时表示数据经过压缩处理
图片头之后紧跟着的就是图片的二进制数据流。原始图片是8位色深的位图数据,包含调色板信息,调色板大小为256乘4个字节。实际解析时需要根据像素格式和长度字段来读取数据,再结合调色板还原成可见的图片。
Python解析的注意事项
编写解析脚本时先把WZX文件以二进制方式打开,读取前48个字节,取出图片总数,然后循环读取剩余部分获取每张图片的偏移地址。拿到偏移地址列表之后去打开WZL文件,seek到对应位置,读取图片头信息,根据宽度高度和长度字段提取出图片数据。数据有可能是压缩过的,需要判断Length字段是否大于0再做相应处理。
解析出来的原始数据是8位色深的位图,需要配合调色板才能正确显示,否则颜色会完全不对。调色板位于WZL文件头之后、第一张图片数据之前,共1024个字节。如果只想快速查看素材内容而不写完整的解析器,可以直接用WIL编辑器这类现成工具,支持批量导出和导入操作。

