如何写一个屏幕取色脚本

wen 实用脚本 2

本文目录导读:

如何写一个屏幕取色脚本

  1. Python + Pillow(最简单)
  2. Python + PyQt5(带界面)
  3. Python 自动取色(点击复制)
  4. 网页版(JavaScript)
  5. 安装依赖
  6. 使用建议

我来为您介绍几种实现屏幕取色脚本的方法,从简单到复杂,您可以根据需求选择:

Python + Pillow(最简单)

from PIL import ImageGrab
import pyautogui
import time
def screen_pixel_color(x, y):
    """获取屏幕指定坐标的颜色"""
    # 获取屏幕像素颜色
    screenshot = ImageGrab.grab()
    color = screenshot.getpixel((x, y))
    return color
# 示例:获取鼠标位置的颜色
def get_mouse_color():
    while True:
        # 获取鼠标位置
        x, y = pyautogui.position()
        color = screen_pixel_color(x, y)
        # 转换为十六进制
        hex_color = '#{:02x}{:02x}{:02x}'.format(*color)
        print(f"位置: ({x}, {y})  RGB: {color}  Hex: {hex_color}")
        time.sleep(0.1)
if __name__ == "__main__":
    get_mouse_color()

Python + PyQt5(带界面)

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QGuiApplication, QCursor
class ColorPicker(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("屏幕取色器")
        self.setFixedSize(300, 150)
        self.setWindowFlags(Qt.WindowStaysOnTopHint)  # 窗口置顶
        # 创建布局
        layout = QVBoxLayout()
        self.color_label = QLabel("RGB: (255, 255, 255)")
        self.hex_label = QLabel("HEX: #FFFFFF")
        self.pos_label = QLabel("位置: (0, 0)")
        self.color_box = QLabel()
        self.color_box.setFixedSize(100, 100)
        self.color_box.setStyleSheet("background-color: white; border: 2px solid black;")
        layout.addWidget(self.color_box)
        layout.addWidget(self.pos_label)
        layout.addWidget(self.color_label)
        layout.addWidget(self.hex_label)
        self.setLayout(layout)
        # 定时更新
        self.timer = QTimer()
        self.timer.timeout.connect(self.update_color)
        self.timer.start(50)  # 每50ms更新一次
    def update_color(self):
        """获取鼠标位置的颜色"""
        # 获取全局鼠标位置
        pos = QCursor.pos()
        self.pos_label.setText(f"位置: ({pos.x()}, {pos.y()})")
        # 获取像素颜色
        screen = QGuiApplication.primaryScreen()
        pixmap = screen.grabWindow(0, pos.x(), pos.y(), 1, 1)
        image = pixmap.toImage()
        color = image.pixelColor(0, 0)
        r, g, b = color.red(), color.green(), color.blue()
        # 更新显示
        self.color_label.setText(f"RGB: ({r}, {g}, {b})")
        self.hex_label.setText(f"HEX: #{r:02X}{g:02X}{b:02X}")
        self.color_box.setStyleSheet(f"background-color: rgb({r}, {g}, {b}); border: 2px solid black;")
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = ColorPicker()
    window.show()
    sys.exit(app.exec_())

Python 自动取色(点击复制)

import tkinter as tk
import pyautogui
import pyperclip
from PIL import ImageGrab
class AutoColorPicker:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("自动取色器")
        self.root.attributes('-topmost', True)  # 置顶
        self.root.geometry("250x100")
        # 颜色显示
        self.color_frame = tk.Frame(self.root, width=100, height=50, bg="#FFFFFF")
        self.color_frame.pack(pady=5)
        info_label = tk.Label(self.root, text="将鼠标移到目标颜色处,点击任意位置取色")
        info_label.pack()
        self.hotkey_label = tk.Label(self.root, text="按 Ctrl+C 复制颜色值")
        self.hotkey_label.pack()
        # 绑定快捷键
        self.root.bind('<Control-c>', self.copy_color)
        self.root.bind('<space>', self.capture_color)
        self.current_color = None
    def capture_color(self, event=None):
        """获取当前鼠标位置的颜色"""
        x, y = pyautogui.position()
        screenshot = ImageGrab.grab()
        color = screenshot.getpixel((x, y))
        hex_color = '#{:02x}{:02x}{:02x}'.format(*color)
        self.current_color = hex_color
        # 更新颜色显示
        self.color_frame.config(bg=hex_color)
        print(f"位置: ({x}, {y}) 颜色: {hex_color}")
    def copy_color(self, event=None):
        """复制当前颜色"""
        if self.current_color:
            pyperclip.copy(self.current_color)
            print(f"已复制: {self.current_color}")
    def run(self):
        self.root.mainloop()
if __name__ == "__main__":
    app = AutoColorPicker()
    app.run()

网页版(JavaScript)

<!DOCTYPE html>
<html>
<head>网页版取色器</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            padding: 20px;
            display: flex;
            gap: 20px;
        }
        #colorPicker {
            cursor: crosshair;
            border: 2px solid #ccc;
        }
        #colorDisplay {
            width: 100px;
            height: 100px;
            border: 2px solid #333;
            margin: 10px 0;
        }
    </style>
</head>
<body>
    <div>
        <canvas id="colorPicker" width="400" height="300"></canvas>
    </div>
    <div>
        <h3>点击图片选择颜色</h3>
        <div id="colorDisplay"></div>
        <p>RGB: <span id="rgbValue">(255, 255, 255)</span></p>
        <p>HEX: <span id="hexValue">#FFFFFF</span></p>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const canvas = document.getElementById('colorPicker');
            const ctx = canvas.getContext('2d');
            // 创建一个渐变色示例
            const gradient = ctx.createLinearGradient(0, 0, canvas.width, canvas.height);
            gradient.addColorStop(0, '#FF0000');
            gradient.addColorStop(0.5, '#00FF00');
            gradient.addColorStop(1, '#0000FF');
            ctx.fillStyle = gradient;
            ctx.fillRect(0, 0, canvas.width, canvas.height);
            // 添加点击事件
            canvas.addEventListener('click', function(e) {
                const rect = canvas.getBoundingClientRect();
                const x = e.clientX - rect.left;
                const y = e.clientY - rect.top;
                const pixel = ctx.getImageData(x, y, 1, 1).data;
                const hex = '#' + [pixel[0], pixel[1], pixel[2]]
                    .map(c => c.toString(16).padStart(2, '0'))
                    .join('');
                document.getElementById('colorDisplay')
                    .style.backgroundColor = hex;
                document.getElementById('rgbValue')
                    .textContent = `(${pixel[0]}, ${pixel[1]}, ${pixel[2]})`;
                document.getElementById('hexValue')
                    .textContent = hex;
            });
        });
    </script>
</body>
</html>

安装依赖

对于Python版本,需要安装:

pip install pillow pyautogui pyperclip
# 或者使用 PyQt5 界面版
pip install PyQt5

使用建议

  1. 简单场景:使用Pillow版本,代码最简洁
  2. 需要界面:使用PyQt5版本
  3. 快捷操作:使用tkinter版本,支持快捷键
  4. 网页项目:使用JavaScript版本

这些脚本可以帮助您实现:

  • 获取鼠标位置的颜色
  • 自动复制颜色值
  • 显示RGB和HEX格式
  • 支持快捷键操作

根据您的具体需求选择合适的版本即可。

抱歉,评论功能暂时关闭!