【请珍藏】python tkinter保存canvas画布的三种方法
2020-06-01 04:36
197 查看
正在尝试着做一个比较完善的画图软件,计划使用tkinter库中的canvas控件来做,然后正在攻关图形项位置、坐标、大小及其他属性项的保存和加载的问题,刚好需要用到坐标、位置的知识,因此作为这个画图软件的附带产出物,整理成了本篇博文,分享给大家,一起研究研究,期待能对你工作带来启发和帮助。
不忘初心,方得始终,让我们一起共勉!
好的,言归正传,回归本篇博文的主题:python tkinter保存canvas画布的三种方法
方法一:
[code]from tkinter import * from PIL import ImageGrab def getter(widget): widget.update() 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("first.jpg") root = Tk() cv = Canvas(root) cv.create_rectangle(10,10,50,50) cv.create_line([0, 10, 100, 100], fill='green') cv.pack() getter(cv) root.mainloop()
运行效果如下:
方法二:
[code]from tkinter import * import win32gui from PIL import ImageGrab #然后是获取Canvas的实现 def CaptureScreen(): HWND = win32gui.GetFocus() #获取当前窗口句柄 rect=win32gui.GetWindowRect(HWND) #获取当前窗口坐标 im=ImageGrab.grab(rect) #截取目标图像 im.save("second.jpeg",'jpeg') #前面一个参数是保存路径,后面一个参数是保存格式 root = Tk() cv = Canvas(root, width=300, height=150) cv.create_rectangle(10,10,50,50) cv.pack() b = Button(root, text='截图', command=CaptureScreen) b.pack() mainloop()
运行效果如下:
通过上图可以发现截图的时候,把root的整个屏幕都截取出来了,但是下面的部分不是我们需要的,那么,我们对RECT的区域进行优化后的脚本如下:
[code]from tkinter import * import win32gui from PIL import ImageGrab def CaptureScreen(): HWND = win32gui.GetFocus() rect=win32gui.GetWindowRect(HWND) x = rect[0] x1=x+cv.winfo_width() y = rect[1] y1=y+cv.winfo_height() im=ImageGrab.grab((x,y,x1,y1)) im.save("second.jpeg",'jpeg') root = Tk() cv = Canvas(root, width=300, height=150) cv.pack() cv.create_rectangle(10,10,50,50) cv.update() b = Button(root, text='截图', command=CaptureScreen) b.pack() root.mainloop()
运行效果如下:
方法三:直接使用ImageDraw进行图片生成。
[code]from tkinter import * from PIL import Image, ImageDraw width = 400 height = 300 center = height//2 white = (222, 222, 220) green = (0,128,0) root = Tk() cv = Canvas(root, width=width, height=height, bg='white') cv.pack() image1 = Image.new("RGB", (width, height), white) draw = ImageDraw.Draw(image1) cv.create_line([0, center, width, center], fill='green') draw.line([0, center, width, center], green) filename = "third.jpg" image1.save(filename) root.mainloop()
运行效果如下:
好的,这篇博文写完了,其实主要是对canvas进行截图,然后保存成图片,基本原理是比较简单,这块功能将会应用在我后续的画图软件中实现,敬请期待!感谢支持!
相关文章推荐
- 将画布(canvas)图像保存成本地图片的方法
- Python3 Tkinter基础 Canvas Button 点击按钮删除画布中的所有图形
- Python3 Tkinter基础 Canvas background 创建一个白色的画布 create_line width 画一个宽的线
- HTML5 Canvas 开发 绘图方法整理 【十四、将 Canvas画布 作为图片保存并下载】
- 将画布(canvas)图像保存成本地图片的方法
- 将画布(canvas)图像保存成本地图片的方法
- 在python tkinter中Canvas实现进度条显示的方法
- MFC三种不同方式实现图形的保存和重绘---方法一:通过集合类CPtrArray保存点的坐标
- MFC三种不同方式实现图形的保存和重绘---方法一:通过兼容DC(CompatibleDC)的方式
- python 逐行读取文件的三种方法
- python将控制台输出保存至文件的方法
- Python 读取图片文件为矩阵和保存矩阵为图片的方法
- 在CentOS上安装Python3的三种方法
- python有三种导入模块的方法
- 一种在windows下利用python中保存网页为pdf的方法
- Python保存/提取数据的方法
- Python实现列表删除重复元素的三种常用方法分析
- python下载文件的三种方法
- Android中XML解析,保存的三种方法
- 使用Python通过win32 COM实现Word文档的写入与保存方法