我需要一个GUI来获取PNG或JPG图像中光标位置的RGB值



我需要在Windows计算机上执行此操作。有没有提供这种能力的程序?如果我能在python中实现这个功能,我也会很满意。我知道在python中,我可以获得(my_image.png(中(xy_position(处的(rgb_values(,如下所示:

xy_position = (100, 100)
img = PIL.Image.open("my_image.png")
rgb_image = img.convert("RGB")
rgb_values = rib_image.getpixel(xy_position)

我也熟悉tkinter,但还没有找到一种方法来制作一个python程序,将(xy_position(的适当值传递给上面的代码。不需要使用tkinter。

我看了所有的tkinter小部件,似乎没有一个能解决问题。

这里有一个基本的应用程序和一个工作示例-如果您使用的图像大于600x600,您可能需要调整窗口geometry!如果在声明dim_xdim_y(y轴上额外的20个像素用于为标签留出空间(之后调用类似self.geometry(f'{dim_x}x{dim_y + 20}')的东西,则可以使其动态化

import tkinter as tk
from PIL import Image, ImageTk
from pathlib import Path

class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry=('600x600')

self.img_path = Path(r'C:PathToimage.png')
self.img = Image.open(self.img_path)
self.img_rgb = self.img.convert('RGB')
dim_x, dim_y = self.img_rgb.size
self.img_tk = ImageTk.PhotoImage(self.img_rgb.resize((dim_x, dim_y)))

self.canvas = tk.Canvas(self)
self.canvas.create_image(dim_x // 2, dim_y // 2, image=self.img_tk)
self.canvas.pack(expand=True, fill=tk.BOTH)
self.rgb_var = tk.StringVar(self, '0 0 0')
self.rgb_label = tk.Label(self, textvariable=self.rgb_var)
self.rgb_label.pack()
self.bind('<Motion>', lambda e: self.get_rgb(e))
def get_rgb(self, event):
x, y = event.x, event.y
try:
rgb = self.img_rgb.getpixel((x, y))
self.rgb_var.set(rgb)
except IndexError:
pass  # ignore errors if the cursor is outside the image

if __name__ == '__main__':
app = App()
app.mainloop()

最新更新