纯python实现一款屏幕取色工具
   1

这是一款纯python实现一款屏幕取色工具,界面使用tkinter实现。下载地址

桌面取色工具 桌面取色工具

实现原理

原理其实很简单,点击取色,弹出一个全屏的透明窗口,获取鼠标点击的位置,在使用ImageGrab.grab()对屏幕截屏,获取鼠标所在位置的颜色。

关键代码

弹出全屏窗口并设置透明

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def open_top_win():
    top = Toplevel()
    w = top.winfo_screenwidth()
    h = top.winfo_screenheight()
    top.geometry(f"{w}x{h}+0+0") # 设置大小
    top.overrideredirect(True) # 隐藏窗口栏
    top.attributes('-alpha', 0.01) # 设置透明度 最小0.01 设置为0 界面会消失掉
    top.configure(cursor="crosshair") # 设置鼠标样式

    top.bind("<Button-1>", callback)  # 设置点击鼠标事件
    top.mainloop()

截屏获取颜色

在回调函数中进行截屏,在通过鼠标位置获取该坐标的颜色值。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
    # 点击后的回调 截屏获取获取颜色值
    def callback(evt):
        top.destroy()
        img = ImageGrab.grab()
        img = img.resize((w, h))
        px = img.load()
        img.close()
        rgb = px[evt.x, evt.y]
        hex_color = rgb2hex(rgb)
        set_color(rgb, hex_color)

窗口大小和截屏的图片大小不一致

如果是win系统,设置了缩放与布局(通常是125%),会出现点击的颜色和返回的颜色不一致的问题,将比例改为100%就会正常取色。但是这样去改系统还是比较麻烦,其实可以在程序里面,将截取的图片,缩放到和窗口大小一样就行。

1
2
# 对截图大小重置为窗口大小。
img = img.resize((w, h))

取色板

取色笔是tk自带组件,调用相关的包就行了。

1
2
from tkinter import colorchooser
colorchooser.askcolor()

RGB转HEX

1
2
3
def rgb2hex(rgb):
    hex_color = "#" + hex(rgb[0])[2:].zfill(2) + hex(rgb[1])[2:].zfill(2) + hex(rgb[2])[2:].zfill(2)
    return hex_color.upper()

HEX转RGB

1
2
3
4
def hex2rgb(hex_color):
    h = hex_color
    rgb = (int((h[1:3]), 16), int((h[3:5]), 16), int((h[5:7]), 16))
    return rgb

主界面代码

主界面代码采用了tkinter布局助手生成的布局代码

站长微信
请备注来意
二维码