Сохранение холста tkinter с черным фоном и белыми линейными объектами с использованием PIL приводит к полностью белому иPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Сохранение холста tkinter с черным фоном и белыми линейными объектами с использованием PIL приводит к полностью белому и

Сообщение Anonymous »

Проблема
При попытке сохранить холст tkinter с помощью PIL он работает должным образом, если фон холста установлен на «белый» и опция заливки для созданных строк на «черный», но при установке фона холста на «черный» и параметра заливки созданных линий на «белый» сохраненное изображение будет просто сплошным цветом (белым) . Почему это происходит?
Версии
Python 3.11.8

pillow== 10.2.0
Код
обычно сохраняет холст
import tkinter as tk
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("", lambda e: self.draw(e.x, e.y))
self.button = tk.Button(self, text="save", command=self.save)
self.canvas.pack(fill="both", expand=True)
self.canvas.focus_set()
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, fill="black")
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("working.png")

app = App()
app.mainloop()

сохраняет полностью белое изображение
import tkinter as tk
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="black")
self.canvas.bind("", lambda e: self.draw(e.x, e.y))
self.button = tk.Button(self, text="save", command=self.save)
self.canvas.pack(fill="both", expand=True)
self.canvas.focus_set()
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, fill="white")
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("white.png")

app = App()
app.mainloop()


Подробнее здесь: https://stackoverflow.com/questions/783 ... ng-pil-res
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»