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

rhfm7lfc  于 2022-10-30  发布在  Python
关注(0)|答案(1)|浏览(157)

我需要在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小部件,似乎没有解决问题.

3pvhb19x

3pvhb19x1#

这里有一个基本的应用程序和一个工作示例--如果你要处理大于600 x600的图像,你可能会想调整窗口geometry!如果你在声明dim_xdim_y之后调用self.geometry(f'{dim_x}x{dim_y + 20}')这样的函数,你可以使它成为动态的(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:\Path\To\image.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()

相关问题