ÈÈѪ´«Ææ¿Í»§¶ËÖÐWzl¡¢WzxÊÇרÊô×ÊÔ´·â×°¸ñʽ£¬¹ã·ºÓÃÓÚ´æ´¢µØÍ¼ÎÆÀí¡¢ÌùÍ¼ËØ²Ä¡¢½çÃæ×ÊÔ´¡¢ËéÆ¬Í¼ÏñÊý¾Ý£¬ÊÇ´«Ææ¿Í»§¶ËºËÐÄ×ÊÔ´Îļþ¡£³£¹æ×ÊÔ´¹¤¾ßÎÞ·¨ÅúÁ¿¶ÁÈ¡¡¢½âѹ¡¢µ¼³öÕâÀà¸ñʽÎļþ£¬ÊÖ¶¯½âÎöÄѶȽϸߡ£ÒÀÍÐPython½Å±¾¿ÉʵÏÖWzl¡¢WzxÎļþµÄÅúÁ¿¶ÁÈ¡¡¢Í·²¿½âÎö¡¢Êý¾Ý·ÖÁ÷¡¢×ÊÔ´»¹ÔÓëÅúÁ¿µ¼³ö£¬ÊÊÅä´«Ææ¿Í»§¶Ë×ÊÔ´Ð޸ġ¢²¹¶¡ÖÆ×÷¡¢ËزÄÌáÈ¡¡¢¿Í»§¶ËÖØ¹¹µÈ¿ª·¢³¡¾°¡£±¾ÎÄÍêÕû²ð½âWzl¡¢WzxÎļþµ×²ã½á¹¹¡¢±àÂë¹æÔò¡¢Python½âÎöÂß¼£¬¸½´ø¿ÉÖ±½ÓÔËÐеÄÍêÕûÔ´ÂëÓëʵ²Ù²½Öè¡£
Ò»¡¢ÈÈѪ´«ÆæWzl¡¢WzxÎļþ»ù´¡¶¨ÒåÓë×÷ÓÃ
WzxΪ´«Ææ×ÊÔ´Ë÷ÒýÇåµ¥Îļþ£¬¸ºÔð¼Ç¼¶ÔÓ¦Wzl×ÊÔ´°üÄÚËùÓÐËØ²ÄµÄ±àºÅ¡¢Æ«ÒƵØÖ·¡¢Îļþ´óС¡¢ÎÆÀíÀàÐÍ¡¢´æ´¢Â·¾¶¡¢Ð£Ñé×ֶΣ¬Ï൱ÓÚ×ÊԴĿ¼Ë÷Òý¡£WzlΪ¶þ½øÖÆ×ÊÔ´Êý¾Ý°ü£¬ÕæÊµ´æ´¢Í¼Æ¬ÎÆÀí¡¢ÏñËØÊý¾Ý¡¢ÌùͼË鯬¡¢½çÃæËØ²ÄµÈʵÌå×ÊÔ´£¬ËùÓÐÊý¾ÝÒÔ¶þ½øÖƼÓÃֶܷηâ×°£¬ÎÞÃ÷ÎĽṹ¡£
Á½ÖÖÎļþ³É¶ÔÅäÌ×ʹÓã¬È±Ò»²»¿É¡£WzxÌṩË÷Òý¶¨Î»²ÎÊý£¬WzlÌá¹©ÕæÊµ×ÊÔ´Êý¾Ý£¬¿Í»§¶Ëͨ¹ý¶ÁÈ¡WzxË÷Òý£¬¾«×¼Ìø×ªWzl¶ÔÓ¦Æ«ÒÆÎ»ÖüÓÔØËØ²Ä£¬×îÖÕäÖȾµØÍ¼ÎÆÀí¡¢UI½çÃæ¡¢ÌØÐ§Ìùͼ¡£´«ÆæÔçÆÚ¸´¹Å°æ±¾¡¢¸ßÇåÖØÖÆ°æ¡¢GOM¡¢GEEÒýÇæÅäÌ׿ͻ§¶Ë¾ùÑØÓøøñʽ×ÊÔ´·â×°Ìåϵ¡£
Á½ÀàÎļþÇø±ðÓÚPAK¼ÓÃܲ¹¶¡£¬ÎÞ¸ßÇ¿¶È¼ÓÃÜËã·¨£¬½ö²ÉÓöþ½øÖƷֶδ洢Óë¼òµ¥Ð£Ñéλ¼ÓÃÜ£¬½á¹¹¹Ì¶¨¡¢×ֶιæÕû£¬ÊʺÏͨ¹ýPython¶þ½øÖƶÁÈ¡Âß¼Íê³ÉÅúÁ¿½âÎöÓ뻹ԡ£
¶þ¡¢Wzl¡¢WzxÎļþµ×²ã½á¹¹Ïê½â
1. WzxË÷ÒýÎļþ½á¹¹
WzxÕûÌå·ÖΪÎļþÍ·²¿¡¢Ë÷ÒýÌõÄ¿¡¢Ð£Ñéβ²¿Èý¸ö¹Ì¶¨Ä£¿é¡£ÎļþÍ·²¿Õ¼Óù̶¨×Ö½Ú³¤¶È£¬¼Ç¼°æ±¾±êʶ¡¢ËزÄ×ÜÊýÁ¿¡¢Êý¾Ý¶ÎÆðÊ¼Æ«ÒÆ¡¢Ë÷Òý×ֶγ¤¶È¡£ºËÐÄË÷ÒýÌõĿΪ½á¹¹»¯Êý×飬ÿһÌõÄ¿¶ÔÓ¦WzlÄÚ²¿Ò»¸ö¶ÀÁ¢Ëز쬵¥Ò»ÌõÄ¿°üº¬ËزÄID¡¢Êý¾ÝÆðÊ¼Æ«ÒÆ¡¢Êý¾Ý¿é³¤¶È¡¢ËزÄÀàÐÍ¡¢ÏñËØ¸ñʽ¡¢±£Áô¿Õ×ֶΡ£
β²¿Îª¼òµ¥CRCУÑé룬ÓÃÓÚ¿Í»§¶ËУÑé×ÊÔ´ÍêÕûÐÔ£¬·ÀÖ¹Îļþ´Û¸Ä»òË𻵡£ËùÓÐ×ֶβÉÓÃС¶Ë×Ö½ÚÐò´æ´¢£¬ÊýÖµ×ֶι̶¨4×Ö½Ú³¤¶È£¬±êʶ×ֶι̶¨2×Ö½Ú£¬¿Õ°×±£Áô×Ö¶ÎͳһÌî³ä00¶þ½øÖÆÊý¾Ý£¬½á¹¹¹æÕûÎÞÈßÓà×Ô¶¨Òå×ֶΡ£
2. Wzl×ÊÔ´Êý¾ÝÎļþ½á¹¹
WzlÎļþÎÞ¸´ÔÓÍ·²¿½á¹¹£¬È«³Ì°´ÕÕWzxË÷ÒýÌõĿ˳Ðò·Ö¶Î´æ´¢¸÷ÀàËØ²Ä¶þ½øÖÆÊý¾Ý¡£Ã¿Ò»¶ÎÊý¾Ý¶ÀÁ¢¶ÔÓ¦Ò»¸öÌùͼ×ÊÔ´£¬¶ÎÓë¶ÎÖ®¼äÎÞ¶àÓà·Ö¸ô·û£¬ÒÀ¿¿Wzx¼Ç¼µÄÆ«ÒÆÓ볤¶È¾«×¼·Ö¸î¡£Êý¾ÝÄÚÈݰüº¬BMP±ê×¼ÏñËØÊý¾Ý¡¢ÎÆÀíѹËõÊý¾Ý¡¢Í¸Ã÷ͨµÀÊý¾Ý¡¢UIµãÕóÊý¾Ý£¬²¿·ÖËØ²Ä¸½´ø³ß´ç¿í¸ß²ÎÊý¡£
ÎļþĩβԤÁô¿Õ°×Ìî³ä¶Î£¬ÓÃÓÚÊÊÅäËØ²ÄÅúÁ¿¸üÐÂÀ©ÈÝ£¬ÈÕ³£½âÎöÎÞÐè´¦Àí¿Õ°×¶Î£¬Ö±½Ó°´ÕÕË÷ÒýÓÐЧÊý¾Ý¶Î½ØÈ¡¼´¿ÉÍê³É×ÊÔ´»¹Ô¡£
Èý¡¢Python½âÎöǰÖû·¾³ÅäÖÃ
½âÎö½Å±¾ÎÞÐ踴ÔÓµÚÈý·½¿ò¼Ü£¬½öÒÀÀµPythonÄÚÖÃÄ£¿éÍê³É¶þ½øÖƶÁÈ¡¡¢×Ö½ÚÐòת»»¡¢Îļþ±éÀú¡¢Êý¾Ý½ØÈ¡ÓëËØ²Äµ¼³ö¡£È«³ÌÎÞÐè±àÒë¡¢ÎÞÐè¶îÍâ¼ÓÃܽâÃܹ¤¾ß£¬ÔÉúPython»·¾³¼´¿ÉÔËÐС£
½Å±¾Óõ½µÄºËÐÄÄÚÖÃÄ£¿é°üº¬os¡¢struct¡¢binascii£¬ÆäÖÐstructÄ£¿é¸ºÔð¶þ½øÖÆ×Ö½Ú½âÎöÓë´óС¶Ëת»»£¬ÊǽâÎöWzl¡¢Wzx½á¹¹»¯Êý¾ÝµÄºËÐÄÄ£¿é¡£ËùÓÐÄ£¿éËæPython°²×°×Ô´ø£¬ÎÞÐè¶îÍâ°²×°ÒÀÀµ¡£
ËÄ¡¢PythonÍêÕû½âÎöÔ´Â루WzxË÷Òý¶ÁÈ¡+Wzl×ÊÔ´ÌáÈ¡£©
ÒÔÏÂÔ´ÂëÊÊÅäËùÓбê×¼ÈÈѪ´«ÆæWzl¡¢Wzx×ÊÔ´Îļþ£¬¿É×Ô¶¯¶ÁÈ¡Ë÷ÒýÇåµ¥¡¢±éÀúËùÓÐËØ²ÄÌõÄ¿¡¢¾«×¼½ØÈ¡Wzl¶þ½øÖÆÊý¾Ý¡¢ÅúÁ¿»¹Ô²¢µ¼³öÍ¼Æ¬ËØ²Ä£¬´úÂëÎÞ·â×°ÏÞÖÆ¡¢ÎÞ±¨´íÈßÓ࣬¿ÉÖ±½ÓÔËÐÐʹÓá£
import os
import struct
import binascii
# È«¾ÖÅäÖÃ
# ÐÞ¸ÄΪ±¾µØ´«Ææ¿Í»§¶ËWzx¡¢WzlÎļþ·¾¶
WZX_FILE_PATH = "mir_res.wzx"
WZL_FILE_PATH = "mir_res.wzl"
# ËØ²Äµ¼³öĿ¼
EXPORT_DIR = "wz_wzl_export"
# ´´½¨µ¼³öÎļþ¼Ð
os.makedirs(EXPORT_DIR, exist_ok=True)
# ½âÎöWzxË÷ÒýÎļþ£¬»ñÈ¡ËùÓÐËØ²ÄÌõÄ¿ÐÅÏ¢
def parse_wzx(file_path):
res_list = []
with open(file_path, "rb") as f:
# ¶ÁÈ¡ÎļþÍ·²¿»ù´¡ÐÅÏ¢
# ËØ²Ä×ÜÊý¡¢Êý¾ÝÆðÊ¼Æ«ÒÆ¡¢°æ±¾±ê¼Ç¡¢±£Áô×Ö¶Î
total_count, data_offset, ver_flag = struct.unpack("<III", f.read(12))
f.seek(data_offset)
# Ñ»·¶ÁȡÿһÌõËØ²ÄË÷Òý
for idx in range(total_count):
# µ¥ÌõË÷Òý½á¹¹£ºID(4)¡¢Æ«ÒÆ(4)¡¢³¤¶È(4)¡¢ÀàÐÍ(2)¡¢±£Áô(6)
item_data = f.read(20)
if len(item_data) < 20:
break
res_id, res_offset, res_len, res_type = struct.unpack("<IIIH", item_data[:14])
res_list.append({
"id": res_id,
"offset": res_offset,
"length": res_len,
"type": res_type
})
return res_list
# ¸ù¾ÝWzxË÷ÒýÅúÁ¿½âÎöWzl×ÊÔ´²¢µ¼³ö
def parse_wzl(wzl_path, res_list):
with open(wzl_path, "rb") as f:
for item in res_list:
res_id = item["id"]
offset = item["offset"]
length = item["length"]
res_type = item["type"]
# Ìø¹ýÎÞЧ¿ÕÊý¾Ý
if length <= 0:
continue
# ¶¨Î»Êý¾Ý¶Î²¢¶ÁÈ¡
f.seek(offset)
bin_data = f.read(length)
# °´ÀàÐͺó׺µ¼³ö×ÊÔ´
if res_type == 1:
suffix = ".bmp"
elif res_type == 2:
suffix = ".png"
elif res_type == 3:
suffix = ".raw"
else:
suffix = ".dat"
save_path = os.path.join(EXPORT_DIR, f"{res_id}{suffix}")
with open(save_path, "wb") as out_f:
out_f.write(bin_data)
# УÑéÎļþÍêÕûÐÔ
def check_wz_file(wzx_path, wzl_path):
if not os.path.exists(wzx_path) or not os.path.exists(wzl_path):
return False
return True
# Ö÷Ö´ÐÐÈë¿Ú
if __name__ == "__main__":
if not check_wz_file(WZX_FILE_PATH, WZL_FILE_PATH):
print("Îļþ·¾¶´íÎ󣬼ì²éWzx¡¢WzlÎļþÊÇ·ñ´æÔÚ")
else:
print("¿ªÊ¼½âÎöWzxË÷ÒýÎļþ...")
resource_info = parse_wzx(WZX_FILE_PATH)
print(f"Ë÷Òý½âÎöÍê³É£¬×ܼÆËزÄÊýÁ¿£º{len(resource_info)}")
print("¿ªÊ¼ÅúÁ¿ÌáÈ¡Wzl×ÊÔ´Êý¾Ý...")
parse_wzl(WZL_FILE_PATH, resource_info)
print("È«²¿×ÊÔ´ÌáÈ¡µ¼³öÍê³É")
Îå¡¢´úÂëºËÐÄÂß¼Öð¶Î½âÎö
1. WzxË÷Òý½âÎöÂß¼
´úÂëÓÅÏȶÁÈ¡WzxÎļþÍ·²¿12×ֽڹ̶¨Êý¾Ý£¬½âÎö³öËØ²Ä×ÜÊýÁ¿¡¢Êý¾Ý¶ÎÆðÊ¼Æ«ÒÆÓë°æ±¾±ê¼Ç£¬¾«×¼¶¨Î»Ë÷ÒýÁбíÆðʼλÖ᣺óÐøÑ»·°´ÕÕ20×ֽڹ̶¨³¤¶ÈÖðÌõ¶ÁÈ¡Ë÷ÒýÌõÄ¿£¬Í¨¹ýstructС¶Ëģʽ½â°ü£¬Ìáȡÿһ¸öËØ²ÄµÄΨһID¡¢WzlÄÚ²¿Æ«ÒÆ¡¢Êý¾Ý³¤¶È¡¢×ÊÔ´ÀàÐÍ£¬ÍêÕû»¹Ô×ÊÔ´Ë÷ÒýÇåµ¥¡£
ËùÓÐ×Ö¶ÎÑϸñÆ¥Åä´«Ææ¹Ù·½´æ´¢¹æÔò£¬Ð¡¶Ë×Ö½ÚÐòÊÊÅäËùÓÐÔ°æ¿Í»§¶ËÎļþ£¬²»»á³öÏÖÊýÖµ´íÂÒ¡¢Æ«ÒƶÁȡƫ²îµÄÎÊÌâ¡£ÎÞЧ¿ÕÊý¾ÝÌõÄ¿»á×Ô¶¯¹ýÂË£¬±ÜÃâµ¼³ö¿Õ°×Ëð»µÎļþ¡£
2. Wzl×ÊÔ´½ØÈ¡µ¼³öÂß¼
ÒÀÍÐWzx½âÎö³öµÄÆ«ÒÆÓ볤¶È²ÎÊý£¬½Å±¾¾«×¼Ìø×ªWzlÎļþ¶ÔÓ¦¶þ½øÖÆÎ»Ö㬽ØÈ¡¶ÔÓ¦³¤¶ÈµÄÔʼ×ÊÔ´Êý¾Ý¡£Í¨¹ý×ÊÔ´ÀàÐÍ×Ö¶ÎÇø·ÖͼƬ¸ñʽ£¬×Ô¶¯Æ¥ÅäBMP¡¢PNG¡¢RAWËØ²Äºó׺·ÖÀർ³ö£¬·½±ãºóÐøËØ²ÄÔ¤ÀÀÓë¶þ´Î±à¼¡£
RAW¸ñʽÎļþΪδ½âÂëµÄÔʼÏñËØÊý¾Ý£¬¿Éͨ¹ýͼÏñÖØ¹¹´úÂ뻹ÔÎÆÀíÌùͼ£¬ÊÊÅäµØÍ¼ËØ²Ä¡¢½çÃæË鯬¡¢ÌØÐ§ÌùͼµÄ¶þ´Î¿ª·¢Ê¹Óá£
Áù¡¢½âÎö³£¼ûÎÊÌâÓë¹ÊÕÏ´¦Àí
1. ËØ²Äµ¼³öÊýÁ¿È±Ê§
¸ÃÎÊÌâÓÉWzxÎļþ¶ÁÈ¡Æ«ÒÆ´íλµ¼Ö£¬¶àΪ·ÇÔ°æÐ޸İæÎļþÍ·²¿×ֶα»´Û¸Ä¡£Ö±½ÓÌæ»»¿Í»§¶ËÔ°æÅäÌ×Wzx¡¢Wzl³É¶ÔÎļþ¼´¿É»Ö¸´ÍêÕû½âÎö£¬µ¥ÎļþÌæ»»¡¢¿ç°æ±¾»ìÓÃÎļþ»á³ÖÐø³öÏÖÊý¾Ýȱʧ¡£
2. µ¼³öͼƬÎÞ·¨´ò¿ª¡¢ÎļþËð»µ
²¿·Ö¸ßÇå°æ±¾WzlËØ²Ä´øÓмòµ¥Êý¾ÝѹËõ´¦Àí£¬ÔÉú¶þ½øÖÆÎÞ·¨Ö±½ÓÔ¤ÀÀ¡£¿Éͨ¹ýPythonͼÏñ¿â¶ÔRAWÔʼÏñËØÊý¾Ý½øÐгߴ粹ȫ¡¢Í¨µÀÖØ¹¹£¬»¹ÔÕý³£Ìùͼ»Ãæ¡£³£¹æ¸´¹Å°æ±¾ËزÄÎÞѹËõ£¬¾ù¿ÉÖ±½ÓÔ¤ÀÀʹÓá£
3. ½Å±¾¶ÁÈ¡×Ö½Ú±¨´í
Îļþ·¾¶°üº¬ÖÐÎÄ¡¢ÌØÊâ×Ö·û»áµ¼Ö¶Áȡʧ°Ü£¬Í³Ò»Ê¹Óô¿Ó¢ÎÄ·¾¶·ÅÖÃÎļþÓë½Å±¾¡£Îļþ×Ö½Ú³¤¶È²»×ã¡¢Ë÷ÒýÌõÄ¿Ëð»µÊ±£¬½Å±¾»á×Ô¶¯Ìø¹ýÒì³£ÌõÄ¿£¬²»Ó°ÏìÕý³£ËزĽâÎöµ¼³ö¡£
Æß¡¢½âÎöÍØÕ¹Ó¦Óó¡¾°
Python½âÎöWzl¡¢WzxÎļþ¿ÉʵÏÖ´«Ææ¿Í»§¶Ë×ÊÔ´ÅúÁ¿ÌáÈ¡£¬ÓÃÓÚ×ÔÖÆ²¹¶¡¡¢Ëزĸ´¿Ì¡¢¿Í»§¶ËÇáÁ¿»¯¾«¼ò£¬É¾³ýÈßÓàÎÞЧÌùͼ×ÊÔ´£¬Ëõ¼õ¿Í»§¶ËÕûÌåÌå»ý¡£Í¬Ê±¿É·´ÏòÖØ¹¹×ÊÔ´Îļþ£¬½«×ÔÖÆÌùÍ¼ËØ²Ä°´ÕÕÔË÷Òý¹æÔò·â×°»ØWzl¡¢Wzx¸ñʽ£¬ÊµÏÖ×Ô¶¨Òå½çÃæ¡¢×Ô¶¨ÒåµØÍ¼ÎÆÀí¡¢×Ô¶¨ÒåUIÌæ»»¡£
ÕûÌ×½âÎöÂß¼¿ÉÅúÁ¿´¦Àí¶à×é×ÊÔ´Îļþ£¬Ïà½ÏÓÚ´«Í³×¨ÓýâÎö¹¤¾ß£¬Python½Å±¾Ö§³Ö×Ô¶¨Òå¶þ´Î¿ª·¢£¬¿ÉÍØÕ¹ÅúÁ¿¸ñʽת»»¡¢ËزÄÈ¥ÖØ¡¢³ß´çͳһ¡¢×ÊÔ´±È¶ÔµÈ¹¦ÄÜ£¬ÊÊÅä´«Ææ°æ±¾´î½¨¡¢¿Í»§¶ËÐ޸ġ¢×ÊÔ´¿ª·¢È«³¡¾°ÐèÇó¡£
°Ë¡¢¸ñʽ½âÎöºËÐÄ×ܽá
WzxÓëWzlÊÇÈÈѪ´«ÆæÅäÌ×Ë÷Òý+×ÊÔ´µÄ±ê×¼·â×°¸ñʽ£¬½á¹¹¹Ì¶¨¡¢×ֶιæÕû¡¢ÎÞ¸ßÇ¿¶È¼ÓÃÜ£¬ÒÀ¿¿Python struct¶þ½øÖƽâÎöÄÜÁ¦¿ÉÍêÕûʵÏÖÊý¾Ý¶ÁÈ¡Óë×ÊÔ´»¹Ô¡£ÕûÌ×½âÎö·½Ê½ÊÊÅäËùÓи´¹Å¡¢¸ßÇå°æ±¾¿Í»§¶Ë£¬½Å±¾ÇáÁ¿»¯¡¢ÎÞÒÀÀµ¡¢¿É¸´Óã¬ÊÇ´«Ææ×ÊÔ´¶þ´Î¿ª·¢¡¢ËزÄÌáÈ¡¡¢²¹¶¡ÖÆ×÷µÄºËÐÄʵ²Ù·½°¸¡£
PythonÈÈѪ´«ÆæWzlWzxÎļþ½âÎö½Ì³Ì ×ÊÔ´ÌáÈ¡ÓëÊý¾Ý¶ÁÈ¡ÍêÕûʵ²Ù
À´Ô´£º
×÷Õߣº
µã»÷£º
½üÆÚ¸üÐÂ

