微信Dat文件转图片(文末含工具下载)

你是否遇到过这样的场景,电脑使用了较长的一段时间后,微信占用了比较大的存储空间,

微信Dat文件转图片(文末含工具下载)_第1张图片

 导致电脑的存储空间不够用,想要先把文件备份或者删除掉,这是我们会发现视频和文件是可以直接备份的,但是图片被微信加密成了是看不懂的dat文件,不删除,电脑空间不够,想删除,又不知道删除的是哪个文件?

微信Dat文件转图片(文末含工具下载)_第2张图片

 这时很多非IT专业的小伙伴,可能就只能眼睁睁的看着电脑的空间越来越少,却无计可施!

那么是否有办法来将dat文件转换成普通的图片格式呢,例如:jpg格式。

下面就简单的介绍一下使用Python进行dat转换为jpg的方法,写的比较简单没有增加复杂逻辑(文末,会放封装好的exe工具)

代码主要会分为两部分:

1、使用tkinter选择文件夹路径和文件要保存的路径

2、将dat文件转换为jpg的简单实现逻辑

完整代码如下:

import tkinter as tk
from tkinter import *
from tkinter import ttk, messagebox
from tkinter import filedialog
import os

# 创建Tkinter帧的实例
app = tk.Tk()

# 定义几何
app.geometry("950x350")

def get_folder():
    path = filedialog.askdirectory()
    str_folder_obj.set(path)


def save_folder_path():
    path = filedialog.askdirectory()
    str_save_obj.set(path)

def DatToImage():
    folder_path = str_folder_obj.get()
    save_path = str_save_obj.get()
    if save_path == "" or folder_path == "":
        messagebox.showinfo("Alert", "文件地址和保存地址都不能为空")
    else:
        openDatFile(folder_path, save_path)
        messagebox.showinfo("Alert", "转码操作完成")
        app.destroy()

# 根据文件夹地址和保存的地址处理dat文件
def openDatFile(folder_path, savepth):
    dat_file_list = os.listdir(folder_path)
    if len(dat_file_list) > 0:
        # print(dat_file_list) # 打印dat文件列表
        for fn in dat_file_list:
            temp_path = os.path.join(folder_path, fn)
            if os.path.isfile(temp_path):
                # print(f'导入的文件路径是{temp_path}') # 打印出要处理的文件,这里比较简单,后期可以增加判断是否为dat格式
                fn = fn[:-4]
                imageDecode(temp_path, savepth, fn)
            else:
                pass
    else: # 未查询到文件时提醒
        messagebox.showinfo("Alert", "此文件夹地址没有查到文件信息")

def imageDecode(folder_path, outpath, fn):
    dat_read = open(folder_path, "rb")
    xo = Format(folder_path)
    out_file = outpath + '\\' + fn + ".jpg"
    png_write = open(out_file, "wb")
    dat_read.seek(0)
    for now in dat_read:
        for nowByte in now:
            newByte = nowByte ^ xo
            png_write.write(bytes([newByte]))

    dat_read.close()
    png_write.close()

def Format(f):
    dat_r = open(f, "rb")
    try:
        a = [(0x89, 0x50, 0x4e), (0x47, 0x49, 0x46), (0xff, 0xd8, 0xff)]
        for now in dat_r:
            for xor in a:
                i = 0
                res = []
                nowg = now[:3]
                for nowByte in nowg:
                    res.append(nowByte ^ xor[i])
                    i += 1
                if res[0] == res[1] == res[2]:
                    return res[0]
    except:
        pass
    finally:
        dat_r.close()


# 创建一个标签和一个按钮以打开对话框
Label(app, text="微信Dat转图片工具", font=('Aerial 18 bold')).pack(pady=20)

str_folder_obj = StringVar()
str_folder_obj.set('文件位置:')
Label(app, textvariable=str_folder_obj, fg="blue", bg="yellow", wraplength=750).place(x=150, y=50, width=800, height=50)
folder_button = ttk.Button(app, text="选择Dat文件夹", command=get_folder)
folder_button.place(x=50, y=50, width=100, height=50)

str_save_obj = StringVar()
str_save_obj.set('文件位置:')
Label(app, textvariable=str_save_obj, fg="blue", bg="yellow", wraplength=750).place(x=150, y=150, width=800, height=50)
save_button = ttk.Button(app, text="选择保存位置", command=save_folder_path)
save_button.place(x=50, y=150, width=100, height=50)

button = ttk.Button(app, text="转换图片", command=DatToImage)
button.place(x=450, y=300)

app.mainloop()

运行效果界面如下:

微信Dat文件转图片(文末含工具下载)_第3张图片

 转换后的效果如下:

微信Dat文件转图片(文末含工具下载)_第4张图片

 工具下载:

链接: https://pan.baidu.com/s/15YcI09jgustzug59jzt3kg

提取码: z8gm 

你可能感兴趣的:(Python的实际应用,应用工具,微信,运维,python)