【发布时间】:2021-06-24 08:23:45
【问题描述】:
此代码生成随机彩色三角形或矩形并将它们显示在 tkinter 画布上。这部分代码运行良好。
但是,我想要将这个随机显示的图片保存为 png 文件。我尝试了几件事,但似乎没有任何效果。
代码如下:
from tkinter import *
from datetime import datetime
from PIL import Image, ImageDraw, ImageTk
from random import randint, randrange
from PIL import ImageGrab as IG
# Create random composite image.
WIDTH, HEIGHT = 500, 500
COUNT = 40
# Use datetime (somehow), to generate random int.
def datetimeToInt():
y, m, d, hour, min, sec = datetime.now().timetuple()[0:6]
return y + m + d + hour + min + sec
def randRgb():
x=(randint(0, 255), randint(0, 255), randint(0, 255))
return x
def randTriangle():
x1, y1 = randrange(0, WIDTH), randrange(0, HEIGHT)
x2, y2 = randrange(0, WIDTH), randrange(0, HEIGHT)
x3, y3 = randrange(0, WIDTH), randrange(0, HEIGHT)
return [(x1,y1), (x2,y2), (x3,y3)]
def randRect():
x1, y1 = randrange(0, WIDTH), randrange(0, HEIGHT)
x2, y2 = randrange(0, WIDTH), randrange(0, HEIGHT)
return [(x1,y1), (x2,y2)]
return
for i in range(2):
randEllipse = randRect
# Map: random shape creation functions -> ImageDraw methods
shapeFactories = [
(randTriangle, ImageDraw.ImageDraw.polygon),
(randRect, ImageDraw.ImageDraw.rectangle) ]
shapeFactoriesCount = len(shapeFactories)
composite = Image.new('RGBA', (WIDTH, HEIGHT), '#00000000')
draw = ImageDraw.Draw(composite)
for x in range(COUNT):
# Get random index, within full range:
#randIdx = randrange(0, shapeFactoriesCount)
# Use random int, generated from datetime (somehow):
randIdx = datetimeToInt() % shapeFactoriesCount
shapeFactory, drawMethod = shapeFactories[randIdx]
drawMethod( # passing 'self'/'draw' explicitly to method:
draw, shapeFactory(), fill=randRgb()
)
# The rest is just for displaying the resulting images.
import tkinter as tk
root = tk.Tk()
compositeTk = ImageTk.PhotoImage(composite)
tk.Label(image=compositeTk).pack()
############
cv=Canvas(root)
cv.pack()
image1 = Image.new("RGB", (WIDTH, HEIGHT))
draw = ImageDraw.Draw(image1)
filename = "my_drawing.jpg"
image1.save(filename)
############
root.mainloop()
【问题讨论】:
-
" 我尝试了几件事,但似乎没有任何效果。" - 你尝试了什么?
-
使用 cv=Canvas(root)
-
然后是 cv.pack()
-
好吧,我是初学者,所以如果这些事情不正确,请不要介意
-
我也尝试将其保存为 .ps 文件,但也没有用
标签: python python-3.x tkinter png