Tkinter - Как превратить текст в изображение? - PullRequest
2 голосов
/ 06 августа 2020

Давайте возьмем это как пример программы:

from tkinter import *
import random
win = Tk()
win.geometry('200x200')

alphabets = ["A", "B", "C"]
rand_alpha = random.choice(alphabets)

lbl = Label(win, font = 'Ariel 30',text = rand_alpha)
lbl.pack()

win.mainloop()

В этой программе я хотел преобразовать текст "rand_alpha" в файл изображения, чтобы я мог использовать PIL для его изменения. Возможно ли с помощью python!?

Ответы [ 3 ]

2 голосов
/ 06 августа 2020

Вы можете использовать ImageDraw для создания желаемого изображения:

from tkinter import *
import random
from PIL import Image, ImageTk, ImageDraw, ImageFont

win = Tk()
win.geometry('200x200')

alphabets = ["A", "B", "C"]
rand_alpha = random.choice(alphabets)

image = Image.new('RGB', (200, 200), (255, 255, 255))  # adjust the size to what you want
draw = ImageDraw.Draw(image)
font = ImageFont.truetype('arial.ttf', size=128) # adjust the font and size to what you want
w, h = draw.textsize(rand_alpha, font=font)
draw.text(((200-w)//2, (200-h)//2), font=font, text=rand_alpha, fill='black')
tkimage = ImageTk.PhotoImage(image)

lbl = Label(win, image=tkimage)
lbl.pack()

win.mainloop()

См. Документ ImageDraw , чтобы узнать, как его использовать.

1 голос
/ 06 августа 2020

Я написал пример с модулями tkinter и PIL. Я добавил несколько комментариев к своему коду для лучшего понимания.

Код:

from tkinter import *
from PIL import Image, ImageDraw, ImageTk
import random

win = Tk()
win.geometry("200x200")

alphabets = ["A", "B", "C"]
rand_alpha = random.choice(alphabets)

img = Image.new("RGB", (100, 100), color="white")  # Create a new 100x100 white image
d = ImageDraw.Draw(img)  # Create Draw instance
d.text((50, 50), rand_alpha, fill=(255, 0, 0))  # Render the text to the image at 50x50 position with red color.

render = ImageTk.PhotoImage(img)  # Rendering picture to TK
img = Label(win, image=render)  # Insert picture to Label widget.
img.image = render
img.place(x=0, y=0)  # Place the picture to the left-top corner


win.mainloop()

GUI:

First Второй

0 голосов
/ 06 августа 2020

Конечно, вы могли бы:

from tkinter import *
import random
from PIL import Image, ImageTk

img = ImageTk.PhotoImage(Image.open("Yourimage"))
win = Tk()
win.geometry('200x200')

alphabets = ["A", "B", "C"]
rand_alpha = random.choice(alphabets)

lbl = Label(win, font='Ariel 30', text=rand_alpha, image=img)
lbl.pack()

win.mainloop()

Если вы не хотите, чтобы изображение перекрывало текст, вам нужно использовать compound=[CENTER,BOTTOM,TOP,LEFT,RIGHT].

...