如果您在对的调用中未提供file参数cnv.postscript
,则acnv.postscript
返回PostScript作为(unicode)字符串。然后,您可以将unicode转换为字节,并将其提供给io.BytesIO
和Image.open
。Image.open
可以作为第一个参数接受任何类似文件的对象,农具read
,seek
和tell
方法。
import io
def savefirst():
cnv = getscreen().getcanvas()
global hen
ps = cnv.postscript(colormode = 'color')
hen = filedialog.asksaveasfilename(defaultextension = '.jpg')
im = Image.open(io.BytesIO(ps.encode('utf-8')))
im.save(hen + '.jpg')
例如,大量借用A. Rodas的代码,
import Tkinter as tk
import subprocess
import os
import io
from PIL import Image
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.line_start = None
self.canvas = tk.Canvas(self, width=300, height=300, bg="white")
self.canvas.bind("<Button-1>", lambda e: self.draw(e.x, e.y))
self.button = tk.Button(self, text="save",
command=self.save)
self.canvas.pack()
self.button.pack(pady=10)
def draw(self, x, y):
if self.line_start:
x_origin, y_origin = self.line_start
self.canvas.create_line(x_origin, y_origin, x, y)
self.line_start = x, y
def save(self):
ps = self.canvas.postscript(colormode='color')
img = Image.open(io.BytesIO(ps.encode('utf-8')))
img.save('/tmp/test.jpg')
app = App()
app.mainloop()