代码拉取完成,页面将自动刷新
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow,QPushButton
from PyQt5.QtCore import QFile, QTextStream, Qt
import keyboard
from PIL import ImageGrab
import os
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.screen_size=(480,1040,1480,1070)#设置一次截图的范围
self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
self.load_ui()
self.apply_stylesheet()
self.setFixedSize(340, 450) # 设置窗口的固定大小
self.move_to_top_right()
self.init_ui()
self.show()
# 监听全局快捷键 f12
keyboard.add_hotkey('f12', self.toggle_window)
keyboard.add_hotkey('b', self.capture_screen)
def load_ui(self):
from PyQt5.uic import loadUi
loadUi('ui/云顶.ui', self)
def init_ui(self):
#搜索控件
self.button = self.findChild(QPushButton, 'exit_button')
# 绑定方法
self.button.clicked.connect(self.close_app)
def apply_stylesheet(self):
style_file = QFile('D:\云顶之弈辅助源码\style.qss')
if style_file.open(QFile.ReadOnly | QFile.Text):
stream = QTextStream(style_file)
self.setStyleSheet(stream.readAll())
style_file.close()
def move_to_top_right(self):
screen_geometry = QApplication.desktop().availableGeometry()
window_geometry = self.geometry()
top_right = screen_geometry.topRight() - window_geometry.topRight()
self.move(top_right)
def close_app(self):
self.close()
def toggle_window(self):
if self.isVisible():
self.hide()
else:
self.show()
self.raise_() # 窗口置于顶层,不过我已经将窗口置于顶层,这里可以不用了。
def capture_screen(self,num_slices=5, slice_offset=100, save_path="D:\\云顶之弈辅助源码\\hash值与图片", similarity_threshold=5):
'''对指定位置进行截图并拆分五份hash进行返回'''
x1,y1,x2,y2=self.screen_size
screenshot = ImageGrab.grab(bbox=(x1, y1, x2, y2))
binary_image = screenshot
screenshot_width, screenshot_height = screenshot.size
small_image_width = (screenshot_width // num_slices) - slice_offset
existing_hashes = set()
for filename in os.listdir(save_path):
if filename.endswith(".png"):
hash_value = filename.split(".")[0]
existing_hashes.add(hash_value)
hashes = set()
for i in range(num_slices):
left = i * (small_image_width + slice_offset)
right = left + small_image_width
small_image = binary_image.crop((left, 0, right, screenshot_height))
md5_hash = self.dhash(small_image)
if md5_hash in existing_hashes:
# print(f"哈希值 {md5_hash} 已存在,跳过重复图片。")
continue
duplicate = False
for stored_hash in hashes:
if self.hamming_distance(stored_hash, md5_hash) <= similarity_threshold:
# print(f"哈希值 {md5_hash} 与 {stored_hash} 相似,视为重复。")
duplicate = True
break
if not duplicate:
image_filename = f"{md5_hash}.png"
image_path = os.path.join(save_path, image_filename)
small_image.save(image_path)
hashes.add(md5_hash)
return hashes
def dhash(self,image, hash_size=8):
image = image.resize((hash_size + 1, hash_size))
pixels = list(image.getdata())
diff = []
for row in range(hash_size):
for col in range(hash_size):
pixel_left = image.getpixel((col, row))
pixel_right = image.getpixel((col + 1, row))
diff.append(pixel_left > pixel_right)
return ''.join(['1' if x else '0' for x in diff])
def hamming_distance(self,hash1, hash2):
return sum(bit1 != bit2 for bit1, bit2 in zip(hash1, hash2))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec_())
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。