基于Python实现屏幕取色工具

 更新时间:2024年12月30日 09:08:00   作者:hvinsion  
屏幕取色小工具‌是一种实用的软件工具,主要用于从屏幕上精确获取颜色值,非常适合设计、编程等需要精确配色的领域,下面我们看看如何利用Python编写一个屏幕取色工具吧

1.简介

屏幕取色小工具‌是一种实用的软件工具,主要用于从屏幕上精确获取颜色值,非常适合设计、编程等需要精确配色的领域。这类工具通常能够从屏幕上任何区域精确提取颜色值,支持在整数值、RGB值、BGR值之间转换‌。资源已打包成exe文件,大家需要可自行下载,喜欢请点个关注,主页还有更多干货资源!

2.运行效果

3.相关源码

from ctypes import windll
import cv2
from numpy import array as arr
from win32api import GetCursorPos, SetCursorPos
import wx
from PIL import ImageGrab
 
 
class colorData:
    def __init__(self, pos=None, color=None, rgb=None):
        self.pos = pos
        self.color = color
        self.rgb = rgb
 
 
class ColorFrame(wx.Dialog):
    def __init__(self):
        windll.user32.SetProcessDPIAware()
        super().__init__(None, title='Desktop Color', size=(200, 300))
        self.panel = wx.Panel(self)
        self.zb = wx.StaticText(self.panel, label='坐标:(0, 0, 0)', style=wx.ALIGN_CENTER)
        self.ys = wx.StaticText(self.panel, label='颜色:(0, 0, 0)', style=wx.ALIGN_CENTER)
        self.RGB = wx.StaticText(self.panel, label='RGB:(0, 0, 0)', style=wx.ALIGN_CENTER)
        self.bitmap = wx.StaticBitmap(self.panel, size=(200, 200))
        self.data = colorData()
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.zb, proportion=1, flag=wx.EXPAND)
        sizer.Add(self.ys, proportion=1, flag=wx.EXPAND)
        sizer.Add(self.RGB, proportion=1, flag=wx.EXPAND)
        sizer.Add(self.bitmap, proportion=1, flag=wx.EXPAND | wx.ALL)
        self.panel.SetSizer(sizer)
        self.Bind(wx.EVT_CLOSE, self.on_close)
        self.Bind(wx.EVT_CHAR_HOOK, self.on_key_press)
        # 创建一个定时器来定期获取桌面颜色并更新标签
        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.on_timer, self.timer)
        self.timer.Start(1)  # 每隔1秒触发一次定时器
 
    def on_timer(self, event):
        point = GetCursorPos()
        screenshot = ImageGrab.grab()
        color = screenshot.getpixel(point)
        img = arr(ImageGrab.grab((point[0] - 10, point[1] - 10, point[0] + 10, point[1] + 10)))
        img = cv2.resize(img, None, None, fx=10, fy=10, interpolation=cv2.INTER_AREA)
        cv2.rectangle(img, (100, 100), (110, 110), (255, 0, 0), 1)
        self.update_label(point, color, img)
 
    def update_label(self, point, color, img):
        self.zb.SetLabel(f'坐标:({point[0]}, {point[1]})')
        self.ys.SetLabel(f'颜色:({color[0]}, {color[1]}, {color[2]})')
        self.RGB.SetLabel(f'RGB:({color[0]:02X}{color[1]:02X}{color[2]:02X})')
        height, width, _ = img.shape
        self.maps = wx.Bitmap.FromBuffer(width, height, img)  # 将Opencv图像转换为wxPython图像对象
        self.bitmap.SetBitmap(self.maps)
 
    def on_close(self, event):
        self.timer.Stop()
        self.Destroy()
 
    def on_key_press(self, event):
        keycode = event.GetKeyCode()
        point = GetCursorPos()
        if keycode == wx.WXK_RETURN or keycode == wx.WXK_NUMPAD_ENTER:
            screenshot = ImageGrab.grab()
            color = screenshot.getpixel(point)
            self.data.pos = point
            self.data.color = color
            self.data.rgb = f'{color[0]:02X}{color[1]:02X}{color[2]:02X}'
            self.on_close(event)
            # self.EndModal(wx.ID_OK)
        elif keycode == wx.WXK_LEFT:
            SetCursorPos((point[0] - 1, point[1]))
        elif keycode == wx.WXK_RIGHT:
            SetCursorPos((point[0] + 1, point[1]))
        elif keycode == wx.WXK_UP:
            SetCursorPos((point[0], point[1] - 1))
        elif keycode == wx.WXK_DOWN:
            SetCursorPos((point[0], point[1] + 1))
 
    def get_data(self):
        return self.data
 
 
app = wx.App()
frame = ColorFrame()
frame.Show()
app.MainLoop()
print(frame.data.pos, frame.data.color, frame.data.rgb)

到此这篇关于基于Python实现屏幕取色工具的文章就介绍到这了,更多相关Python屏幕取色内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python requests下载文件的几种常用方法(附代码)

    Python requests下载文件的几种常用方法(附代码)

    这篇文章主要介绍了五种下载方式的实现方法,包括基础下载、大文件分块下载、带有断点续传的下载、带有超时和重试的下载以及完整的下载器实现,文中给出了详细的代码示例,需要的朋友可以参考下
    2025-03-03
  • django 数据库 get_or_create函数返回值是tuple的问题

    django 数据库 get_or_create函数返回值是tuple的问题

    这篇文章主要介绍了django 数据库 get_or_create函数返回值是tuple的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python基于百度API识别并提取图片中文字

    Python基于百度API识别并提取图片中文字

    本文主要实现了利用百度 AI 开发平台的 OCR 文字识别 API 识别并提取图片中的文字。具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • python 获取图片分辨率的方法

    python 获取图片分辨率的方法

    今天小编就为大家分享一篇python 获取图片分辨率的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 一步步教你用Python画五彩气球

    一步步教你用Python画五彩气球

    这篇文章主要给大家介绍了关于如何用Python画五彩气球的相关资料,主要是用turtle库自带的画笔turtle.Turtle()来绘制气球,文中给出了详细的实例代码,需要的朋友可以参考下
    2023-06-06
  • numpy.sum()坐标轴问题的解决

    numpy.sum()坐标轴问题的解决

    本文主要介绍了numpy.sum()坐标轴问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 教你用Python代码实现合并excel文件

    教你用Python代码实现合并excel文件

    近几天一直因为excel文件太多太杂的原因苦恼,今天特地整理了本篇文章,文章介绍的非常详细,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • Python多路复用selector模块的基本使用

    Python多路复用selector模块的基本使用

    Python提供了selector模块来实现IO多路复用,这篇文章给大家介绍了Python多路复用selector模块的基本使用,感兴趣的朋友一起看看吧
    2021-11-11
  • 浅谈Selenium 控制浏览器的常用方法

    浅谈Selenium 控制浏览器的常用方法

    这篇文章主要介绍了浅谈Selenium 控制浏览器的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Python调用.NET库的方法步骤

    Python调用.NET库的方法步骤

    这篇文章主要介绍了Python调用.NET库的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论