微信聊天记录长图切割

将微信聊天记录长截图进行切割,除第一张切图外,其余切图包含上张切图的后几句聊天记录,支持2种格式,单张或双张切图。
demo

依赖

  • pillow
  • tkinter

运行

python main.py

运行界面

操作说明

选择长截图所在文件夹,点击运行即可。
程序会遍历所选文件夹下的所有图片,对其进行截图,结果保存在所选文件夹下的所选图片同名的文件夹下,按顺序进行编号。

主要代码

def splitPicture(file_name: str, width_dt: int = 10):
    config_file = "config.json"
    if os.path.exists(config_file):
        config_json = getConfigData(config_file)
    else:
        config_json = {"图片高度": 2400, "重复高度": 200}
        with open(config_file, "w", encoding="utf-8") as f:
            f.write(json.dumps(config_json, ensure_ascii=False))
    pic_height = config_json["图片高度"]
    idt_height = config_json["重复高度"]

    path, text = os.path.splitext(file_name)
    _, name = os.path.split(path)
    if not os.path.exists(path):
        os.mkdir(path)
    im = Image.open(file_name)
    image_width, image_height = im.size

    i = 1
    upper = 0
    to_image = None
    while upper < image_height:
        if upper > idt_height:
            upper -= idt_height
        bottom = upper + pic_height
        if bottom > image_height:
            bottom = image_height
        region = im.crop((0, upper, image_width, bottom))
        region.save(os.path.join(path, f"{name}_{i:02d}{text}"))

        if to_image is None:
            to_image = Image.new(
                "RGB", (image_width * 2 + width_dt, pic_height), "white"
            )
            to_image.paste(region, (0, 0))
        else:
            to_image.paste(region, (image_width + width_dt, 0))
            to_image.save(os.path.join(path, f"_{name}_{(i-1):02d}{text}"))
            to_image = Image.new(
                "RGB", (image_width * 2 + width_dt, pic_height), "white"
            )
            to_image.paste(region, (0, 0))

        upper = bottom
        i += 1
    return None

配置

参见config.json

{
    "图片高度": 2400,
    "重复高度": 200
}

打包

pyinstaller -F -w -i .\favicon.ico -n 切图 .\main.py -i .\favicon.ico -n 切图 .\main.py

github

https://github.com/chenwr727/wechat-chat-record-screenshot

<think>好的,我现在要帮用户介绍一下微信小程序的大文件上传。首先,我需要了解用户的需求,他们可能遇到了上传大文件的问题,或者想知道如何在小程序中实现这个功能。微信小程序的开发有一些限制,比如单个文件上传的大小限制,所以用户可能需要绕过这些限制的方法。 接下来,我要回忆微信小程序的官方文档内容。记得默认情况下,微信小程序的上传文件接口(wx.uploadFile)有大小限制,以前是10MB,但可能现在有变化,需要确认。比如,现在是否还是10MB,或者是否有调整。不过,不管具体数字,大文件上传肯定需要分片处理。 然后,用户可能需要分片上传的具体步骤。分片上传的基本流程包括文件分片、并行上传、服务端合并等。同时,还要考虑如何计算分片,使用File对象或者Blob对象进行切割。另外,每个分片需要有一个唯一的标识,可能用MD5或者hash值来确保文件的唯一性,避免重复上传。 还要考虑网络问题,比如断点续传。如果上传中途失败,如何从断点继续上传,而不是重新开始。这需要客户端记录上传进度,服务端保存已上传的分片信息。 另外,微信小程序中使用的API需要注意兼容性和权限问题。比如,选择文件时使用wx.chooseMessageFile还是其他API,不同API支持的文件类型和大小可能不同。例如,wx.chooseMessageFile可以选聊天文件,可能支持更大的文件,但需要用户授权。 然后,服务端的处理也很重要。服务端需要接收分片,存储,并在所有分片上传完成后合并。合并时要注意顺序,确保文件的正确性。可能还需要处理并发上传的问题,比如多个分片同时上传时的冲突。 另外,前端显示上传进度也是一个关键点。可能需要计算每个分片的上传进度,然后综合整个文件的进度,给用户反馈。可以使用wx.uploadFile的progress回调来实现。 还有,大文件上传可能涉及到性能问题,比如内存占用过高,导致小程序卡顿。需要合理设置分片大小,避免分片过小导致请求过多,或者分片过大导致内存不足。 可能还需要处理一些边界情况,比如文件刚好是分片大小的整数倍,或者最后一个分片较小。同时,文件校验,上传完成后检查文件的完整性,比如比对MD5值。 总结下来,实现步骤大致是:1. 选择文件并获取文件对象;2. 分片处理;3. 上传分片;4. 服务端合并;5. 处理进度和异常。 在具体编码时,需要注意微信小程序的API限制,比如无法直接操作文件二进制数据,可能需要使用ArrayBuffer或者Base64转换。此外,分片上传需要维护每个分片的状态,可能需要使用本地缓存或者变量存储。 还需要考虑用户体验,比如上传过程中允许用户取消,或者后台继续上传。微信小程序的后台运行限制较多,可能需要使用Worker或者其他方式,但可能复杂。 最后,测试不同场景,比如大文件、网络不稳定、服务端重启等,确保上传的可靠性和稳定性。</think>微信小程序大文件上传解决方案(分片上传实现原理) $$time = \frac{文件大小}{网络速度} + 分片数 \times 传输延迟$$ 一、核心限制与解决方案 1. 微信默认限制 - 单文件上传限制:10MB(可通过配置提升至20MB) - 内存限制:iOS 200MB / Android 100MB 2. 突破限制方案 $$分片大小 = \min(文件大小, 内存限制 \times 0.8)$$ 采用分片上传(chunked upload)+ 断点续传机制 二、实现步骤 1. 前端分片处理 ```javascript // 文件选择 wx.chooseMessageFile({ success(res) { const file = res.tempFiles[0] const chunkSize = 5 * 1024 * 1024 // 5MB/片 const chunks = Math.ceil(file.size / chunkSize) } }) ``` 2. 分片上传逻辑 $$上传成功率 = 1 - (1 - p)^n$$ (p为单分片成功率,n为分片数) ```javascript for(let i=0; i<chunks; i++){ const blob = file.slice(i*chunkSize, (i+1)*chunkSize) wx.uploadFile({ url: 'https://your.domain/upload', filePath: blob, formData: { chunkNumber: i, totalChunks: chunks, fileHash: fileHash } }) } ``` 3. 服务端处理要点 - 分片临时存储 - 哈希校验(推荐SHA-256) - 分片合并 $$合并耗时 = \frac{文件大小}{磁盘IO速度}$$ 三、性能优化策略 1. 并发控制 $$最优并发数 = \frac{带宽(Mbps) \times 1024}{分片大小(KB) \times 8}$$ 2. 断点续传实现 - 本地存储记录已上传分片 - 服务端返回缺失分片索引 四、注意事项 1. 安全机制 - 文件类型白名单校验 - 病毒扫描(建议使用云函数) 2. 用户体验优化 - 进度计算:$$总进度 = \frac{\sum 已传分片大小}{文件总大小} \times 100\%$$ - 后台持续上传(需申请相关权限) 五、完整技术架构 ``` [小程序端] ├─ 文件选择 → 分片处理 → 并发上传 └─ 进度监控 ← 失败重试 ← 断点记录 [服务端] ├─ 分片接收 → 临时存储 → 完整性校验 └─ 合并请求 → 持久化存储 → 结果返回 ``` 建议测试场景: 1. 弱网络环境(3G模拟) 2. 上传中断恢复 3. 重复文件秒传 4. 不同文件类型(视频/压缩包/文档) 通过上述方案可实现稳定上传2GB以内文件(实际测试数据),更大文件建议使用微信原生视频接口或云存储方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值