1 Star 0 Fork 0

tlq-github/TFT_assistant

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
hash2.py 4.17 KB
一键复制 编辑 原始数据 按行查看 历史
TLQ 提交于 1年前 . 第一次提交
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_())
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/tlq-github/TFT_assistant.git
git@gitee.com:tlq-github/TFT_assistant.git
tlq-github
TFT_assistant
TFT_assistant
master

搜索帮助