将画布另存为 jpg 时获取 1x1px 图像

伊戈尔234

我有以下代码用于在画布上绘图,然后将我的绘图保存为图像:

def paint(event):
    global brush_size
    global color
    x1 = event.x - brush_size
    x2 = event.x + brush_size
    y1 = event.y - brush_size
    y2 = event.y + brush_size
    w.create_oval(x1, y1, x2, y2,
                  fill = color,
                  outline=color)


def getter(widget):
    x = root.winfo_rootx() + widget.winfo_x()
    y = root.winfo_rooty() + widget.winfo_y()
    x1 = x + widget.winfo_width()
    y1 = y + widget.winfo_height()
    ImageGrab.grab().crop((x,y,x1,y1)).save("img1.jpg")

root = Tk()
root.title("Paint")

w = Canvas(root,
           width=canvas_width,
           height=canvas_height,
           bg="white")
w.bind("<B1-Motion>", paint)

save_btn = Button(text="Save", width=10, command=getter(w))

w.grid(row=2, column=0,
       columnspan=7,
       padx=5, pady=5,
       sticky=E+W+S+N)

w.columnconfigure(6, weight=1)
w.rowconfigure(2, weight=1)

save_btn.grid(row=0, column=1)

root.mainloop()

但是当我点击“保存”按钮时,我得到一个空的 1x1px jpg 文件。你能告诉我这有什么问题吗?

PS和一些额外的问题。当我画得很快时,我没有得到一条连续的线。我得到了点之间有间隙的点。我该如何解决?

internet_user

我不完全确定 tkinter 是如何工作的,所以这只是一个猜测,但看起来您正在绑定getter(w)( None)的结果,而不是函数。你可以像这样解决这个问题lambda: getter(w)对于您的其他问题,您可以记录以前的鼠标位置并在当前位置和以前的位置之间画一条线。您还可以专门定义一个函数来保存图像,并将其用作命令。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章