python(58) : 监听粘贴板图片并保存

1.剪贴板图片监听保存工具

一个自动监听系统剪贴板并保存图片的 Python 工具。当你复制图片到剪贴板时,程序会自动检测并保存到本地目录。

功能特点

  • 🔍 自动监听剪贴板:实时监控系统剪贴板中的图片内容
  • 💾 自动保存:检测到新图片时自动保存为 PNG 格式
  • 🔢 智能编号:使用计数器自动为图片文件编号,避免文件名冲突
  • 🚫 去重机制:通过图片内容比较,避免重复保存相同的图片
  • ⚡ 低延迟:每 0.5 秒检查一次剪贴板,快速响应

安装要求

依赖库

pip install PyQt5

系统要求

  • Python 3.6+
  • Windows / Linux / macOS(支持 PyQt5 的系统)

使用方法

  1. 安装依赖

    pip install PyQt5
    
  2. 运行程序

    python 监听粘贴板图片并保存.py
    
  3. 使用方式

    • 程序运行后会在后台持续监听剪贴板
    • 当你复制图片到剪贴板时(如截图、复制图片文件等),程序会自动保存
    • 保存的图片会显示在控制台,格式为:已保存图片: X.png
  4. 停止程序

    • 按 Ctrl+C 停止程序运行

文件结构

运行程序后,会在当前目录下创建以下结构:

.
├── 监听粘贴板图片并保存.py    # 主程序文件
└── screenshot_list/            # 图片保存目录(自动创建)
    ├── counter.txt             # 计数器文件(记录下一个编号)
    ├── 1.png                   # 保存的图片文件
    ├── 2.png
    └── ...

工作原理

  1. 剪贴板监听:使用 PyQt5 的 QGuiApplication.clipboard() 访问系统剪贴板
  2. 图片检测:每 0.5 秒检查一次剪贴板是否包含图片数据
  3. 去重判断:将图片转换为字节流,与上一次保存的图片进行比较
  4. 文件保存
    • 读取计数器文件获取下一个编号
    • 将图片保存为 {编号}.png
    • 更新计数器文件

注意事项

  • ⚠️ 程序会持续运行,占用少量系统资源
  • ⚠️ 如果手动删除 screenshot_list 目录,计数器会重置为 1
  • ⚠️ 如果手动删除 counter.txt 文件,程序会重新创建并从 1 开始计数
  • ⚠️ 程序只保存 PNG 格式的图片,其他格式的剪贴板内容会被忽略

使用场景

  • 📸 批量保存截图
  • 🖼️ 收集剪贴板中的图片素材
  • 📋 自动归档复制的图片
  • 🔄 配合截图工具使用,实现自动保存功能

技术说明

  • 框架:PyQt5
  • 图片格式:PNG
  • 检查频率:0.5 秒/次
  • 去重方式:图片字节流比较

2.python代码

# pip install PyQt5
import sys
import os
import time
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QGuiApplication, QImage
from PyQt5.QtCore import QBuffer, QIODevice

SAVE_DIR = "screenshot_list"
os.makedirs(SAVE_DIR, exist_ok=True)
COUNTER_FILE = os.path.join(SAVE_DIR, "counter.txt")

def get_next_counter():
    if os.path.exists(COUNTER_FILE):
        try:
            with open(COUNTER_FILE, "r") as f:
                return int(f.read().strip())
        except:
            pass
    if not os.path.exists(SAVE_DIR):
        os.makedirs(SAVE_DIR, exist_ok=True)
    # 检查计数器文件是否存在,否则创建初始为1
    with open(COUNTER_FILE, "w") as f:
        f.write("1")
    return 1

def save_counter(n):
    with open(COUNTER_FILE, "w") as f:
        f.write(str(n))

def save_image(image: QImage, idx: int):
    if not os.path.exists(SAVE_DIR):
        os.makedirs(SAVE_DIR, exist_ok=True)
    path = os.path.join(SAVE_DIR, f"{idx}.png")
    image.save(path, "PNG")

def main_loop():
    app = QApplication(sys.argv)
    clipboard = QGuiApplication.clipboard()
    last_data = None

    while True:
        mime = clipboard.mimeData()
        if mime.hasImage():
            image = clipboard.image()
            # 检查图片是否和上一次一样,避免重复保存
            # 转化为字节流做内容去重
            buffer = QBuffer()
            buffer.open(QIODevice.WriteOnly)
            image.save(buffer, "PNG")
            img_bytes = buffer.data()
            buffer.close()
            if (last_data is None) or (img_bytes != last_data):
                counter = get_next_counter()
                save_image(image, counter)
                save_counter(counter + 1)
                print(f"已保存图片: {counter}.png")
                last_data = img_bytes
        time.sleep(0.5)

if __name__ == "__main__":
    main_loop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值