Python Tkinter使用PIL将画布保存为图像
发布时间:2020-12-20 11:28:40 所属栏目:Python 来源:网络整理
导读:我有这个代码,让用户在画布上绘制并将其保存为jpeg文件. 正如在this post中所提到的,我尝试使用PIL在画布和内存中并行绘制,以便我可以将其保存为jpeg而不是postscript.它似乎工作,直到我发现我用PIL保存的一些图像与画布上绘制的图像不一样. 我假设来自PIL图
我有这个代码,让用户在画布上绘制并将其保存为jpeg文件.
正如在this post中所提到的,我尝试使用PIL在画布和内存中并行绘制,以便我可以将其保存为jpeg而不是postscript.它似乎工作,直到我发现我用PIL保存的一些图像与画布上绘制的图像不一样. 我假设来自PIL图像绘制模块功能的canvas.create_line和draw.line类似,并且应该给出类似的输出. 以下是出了什么问题: 例如,当我绘制“T”时,它似乎没问题(左边是我的绘图,右边是保存的图像). 但是当我绘制“A”时,输出图像看起来有点奇怪. 这是我目前的代码: import Tkinter as tk import Image,ImageDraw class ImageGenerator: def __init__(self,parent,posx,posy,*kwargs): self.parent = parent self.posx = posx self.posy = posy self.sizex = 200 self.sizey = 200 self.b1 = "up" self.xold = None self.yold = None self.coords= [] self.drawing_area=tk.Canvas(self.parent,width=self.sizex,height=self.sizey) self.drawing_area.place(x=self.posx,y=self.posy) self.drawing_area.bind("<Motion>",self.motion) self.drawing_area.bind("<ButtonPress-1>",self.b1down) self.drawing_area.bind("<ButtonRelease-1>",self.b1up) self.button=tk.Button(self.parent,text="Done!",width=10,bg='white',command=self.save) self.button.place(x=self.sizex/7,y=self.sizey+20) self.button1=tk.Button(self.parent,text="Clear!",command=self.clear) self.button1.place(x=(self.sizex/7)+80,y=self.sizey+20) self.image=Image.new("RGB",(200,200),(255,255,255)) self.draw=ImageDraw.Draw(self.image) def save(self): print self.coords self.draw.line(self.coords,(0,128,0),width=3) filename = "temp.jpg" self.image.save(filename) def clear(self): self.drawing_area.delete("all") self.coords=[] def b1down(self,event): self.b1 = "down" def b1up(self,event): self.b1 = "up" self.xold = None self.yold = None def motion(self,event): if self.b1 == "down": if self.xold is not None and self.yold is not None: event.widget.create_line(self.xold,self.yold,event.x,event.y,smooth='true',width=3,fill='blue') self.coords.append((self.xold,self.yold)) self.xold = event.x self.yold = event.y if __name__ == "__main__": root=tk.Tk() root.wm_geometry("%dx%d+%d+%d" % (400,400,10,10)) root.config(bg='white') ImageGenerator(root,10) root.mainloop() 我哪里出错了,我应该怎么做才能保存画布上绘制的完全相同的图片作为jpeg图像? 解决方法
我设法解决了我的问题.事实上我只是愚蠢.即使canvas.create_line和draw.line具有相似的功能,我也没有使用相同的精确数据来绘制两个图像.在进行更改后,这是我的工作代码.
import Tkinter as tk import Image,*kwargs): self.parent = parent self.posx = posx self.posy = posy self.sizex = 200 self.sizey = 200 self.b1 = "up" self.xold = None self.yold = None self.drawing_area=tk.Canvas(self.parent,255)) self.draw=ImageDraw.Draw(self.image) def save(self): filename = "temp.jpg" self.image.save(filename) def clear(self): self.drawing_area.delete("all") self.image=Image.new("RGB",255)) self.draw=ImageDraw.Draw(self.image) def b1down(self,fill='blue') self.draw.line(((self.xold,self.yold),(event.x,event.y)),width=3) self.xold = event.x self.yold = event.y if __name__ == "__main__": root=tk.Tk() root.wm_geometry("%dx%d+%d+%d" % (400,10) root.mainloop() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 关于pip的安装,更新,卸载模块以及使用方法(详解)
- python – 如何将整个列表分配给pandas数据帧的每一行
- 键盘 – Python – 检测按键
- Python – 如何在同一时间等待队列和套接字
- Python分布式爬虫必学框架Scrapy打造搜索引擎
- 计算词和词组频率的Python nltk
- python – 使用cx_Freeze获取“ImportError:DLL加载失败:
- python – super的用法是什么(ClassName,self)._ init_()
- Python:用于验证模式和自定义错误消息的jsonschema包
- python与sqlite3实现解密chrome cookie实例代码