1.剪贴板图片监听保存工具
一个自动监听系统剪贴板并保存图片的 Python 工具。当你复制图片到剪贴板时,程序会自动检测并保存到本地目录。
功能特点
- 🔍 自动监听剪贴板:实时监控系统剪贴板中的图片内容
- 💾 自动保存:检测到新图片时自动保存为 PNG 格式
- 🔢 智能编号:使用计数器自动为图片文件编号,避免文件名冲突
- 🚫 去重机制:通过图片内容比较,避免重复保存相同的图片
- ⚡ 低延迟:每 0.5 秒检查一次剪贴板,快速响应
安装要求
依赖库
pip install PyQt5
系统要求
- Python 3.6+
- Windows / Linux / macOS(支持 PyQt5 的系统)
使用方法
-
安装依赖
pip install PyQt5 -
运行程序
python 监听粘贴板图片并保存.py -
使用方式
- 程序运行后会在后台持续监听剪贴板
- 当你复制图片到剪贴板时(如截图、复制图片文件等),程序会自动保存
- 保存的图片会显示在控制台,格式为:
已保存图片: X.png
-
停止程序
- 按
Ctrl+C停止程序运行
- 按
文件结构
运行程序后,会在当前目录下创建以下结构:
.
├── 监听粘贴板图片并保存.py # 主程序文件
└── screenshot_list/ # 图片保存目录(自动创建)
├── counter.txt # 计数器文件(记录下一个编号)
├── 1.png # 保存的图片文件
├── 2.png
└── ...
工作原理
- 剪贴板监听:使用 PyQt5 的
QGuiApplication.clipboard()访问系统剪贴板 - 图片检测:每 0.5 秒检查一次剪贴板是否包含图片数据
- 去重判断:将图片转换为字节流,与上一次保存的图片进行比较
- 文件保存:
- 读取计数器文件获取下一个编号
- 将图片保存为
{编号}.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()

1183

被折叠的 条评论
为什么被折叠?



