我有这个代码,让用户在画布上绘制并将其保存为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("", self.motion)

self.drawing_area.bind("", self.b1down)

self.drawing_area.bind("", 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!",width=10,bg='white',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,10)

root.mainloop()

我哪里出错了,我应该怎么做才能保存画布上绘制的完全相同的图片作为jpeg图像?

python 画布 保存_Python Tkinter使用PIL将画布保存为图像相关推荐

  1. python pillow环境_Python环境Pillow( PIL )图像处理工具使用解析

    前言 由于笔者近期的研究课题与图像后处理有关,需要通过图像处理工具对图像进行变换和处理,进而生成合适的训练图像数据.该系列文章即主要记录笔者在不同的环境下进行图像处理时常用的工具和库.在 Python ...

  2. python俄罗斯方块教程_python tkinter实现俄罗斯方块 基础版

    本项目最终效果见本人b站投稿av81480858 简介部分 本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 .其中1 ...

  3. Python设置画布大小_Python Tkinter Canvas画布

    简介 画布部件则用于将结构化图形的 Python 应用.它是用于绘制图表和曲线图的 Python 应用. 画布部件则用于将结构化图形的 Python 应用.它是用于绘制图表和曲线图的 Python 应 ...

  4. python tkinter画布位置_Python Tkinter坐标画布

    我在这里完全是初学者.我想知道x1的坐标,而它正在移动,所以它会不断更新.在 这是我的密码.在from tkinter import * import tkinter as tk import tim ...

  5. python 单机程序_Python tkinter制作单机五子棋游戏

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python家庭,作者Python家庭 实战项目:使用Python ...

  6. python下载图片并保存_Python爬虫获取图片并下载保存至本地的实例

    1.抓取煎蛋网上的图片. 2.代码如下: import urllib.request import os #to open the url def url_open(url): req=urllib. ...

  7. python单选按钮重置_python – Tkinter单选按钮初始化错误

    存储变量对象的位置(StringVar,v,在您的情况下)必须保持不变,以便这种奇怪的行为不会出现.我的猜测是我们看到这种行为因为v超出了范围,出了问题.除了使用全局之外,我无法想到从函数中执行此操作 ...

  8. python窗口居中_Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例

    我就废话不多说了.大家直接看代码吧! #!/usr/bin/env python #coding=utf-8 ''' 窗口屏幕居中,设置窗口最大,最小尺寸... 版权所有 2014 yao_yu (h ...

  9. python图像处理模块_Python图像处理库PIL的ImageEnhance模块使用介绍

    Python图像处理库PIL的ImageEnhance模块使用介绍 发布时间:2020-08-31 20:08:55 来源:脚本之家 阅读:66 ImageEnhance模块提供了一些用于图像增强的类 ...

最新文章

  1. 为什么很多SpringBoot开发者放弃了Tomcat,选择了Undertow
  2. 移动互联网改变商业环境:商品的颠覆
  3. Tensorflow安装与测试
  4. 用java读取properties文件--转
  5. Android 权限问题
  6. maven book
  7. 使用Nginx实现灰度发布
  8. 焦旭超 201771010109《面向对象程序设计课程学习进度条》
  9. 二分算法模板及oj练习题题解
  10. java 获取方法的注释_java – 有更有效的方法来获取注释方法吗?
  11. java高手之路上的必备基础知识
  12. 控制台运行jar中文乱码问题
  13. php基础语法学习汇总
  14. Clover_v2.3k版本合集 四叶草EFI文件、Pkg安装包
  15. 使用EasyPoi完成复杂一对多excel表格导出功能
  16. 预卷积HDR环境贴图
  17. 时间戳 天数 php,php时间戳转天数
  18. [转]UserData使用总结 - lanyu
  19. 《人月神话》(P10)必须有文档
  20. 单片机硬件抗干扰常用方法

热门文章

  1. 阿里云的很多域名没有办法进行实名认证了吗
  2. nodejs TCP服务器和客户端通信的socket结构
  3. How is BDOC hold parent removal action in ERP
  4. 如何基于ERP的sales organization 创建CRM对应的数据
  5. IPM: Partner determination in Acquisition contract containing IP Product
  6. Web socket广播
  7. 如何对C4C UI上的手机号码字段加上自定义验证逻辑
  8. SAP技术专家的ABAP调试器培训材料
  9. 编程面试题:编写一个会造成数据库死锁的应用
  10. python队列是线程安全的吗_python – 为什么我的多进程队列看起来不是线程安全的?...