Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # tk_text_zoom.py
- import tkinter as tk
- from PIL import Image, ImageDraw, ImageFont, ImageTk
- WW, HH = 640, 640
- CX, CY = WW // 2, HH // 2
- root = tk.Tk()
- root.title("# tk_text_zoom.py")
- root.geometry("+0+0")
- canvas = tk.Canvas(root, width=WW, height=HH)
- canvas.pack()
- def get_font(font_size):
- return ImageFont.truetype("times.ttf", font_size)
- def create_txt():
- font_size = 400
- font = get_font(font_size)
- while True:
- bbox = font.getbbox("a")
- text_width = bbox[2] - bbox[0]
- text_height = bbox[3] - bbox[1]
- if text_width > WW - 8 or text_height > HH - 8:
- break
- font_size += 1
- font = get_font(font_size)
- def blank_check():
- for x in range(WW):
- if pixels[x, HH - 1][0]:
- return False
- return True
- for y_offset in range(HH):
- img = Image.new("RGBA", (WW, HH), (0, 0, 0, 0))
- draw = ImageDraw.Draw(img)
- draw.text((CX, CY - y_offset), "a", fill="red", font=font, anchor="mm")
- pixels = img.load()
- if blank_check():
- break
- return img
- img_txt_default = create_txt()
- img_txt = img_txt_default.copy()
- current_scale = 1
- while True:
- t = int(current_scale)
- scaled_img = img_txt.resize((t, t), Image.ANTIALIAS)
- current_scale *= 1.05
- if t > WW:
- left = (t - WW) // 2
- top = (t - HH) // 2
- right = left + WW
- bottom = top + HH
- img_txt = scaled_img.crop((left, top, right, bottom))
- if current_scale > 1000:
- img_txt = img_txt_default.copy()
- current_scale = 1
- scaled_tk_img = ImageTk.PhotoImage(scaled_img)
- canvas.delete("all")
- canvas.create_image(CX, CY, image=scaled_tk_img, anchor="center")
- canvas.update()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement