Python Forum

Full Version: Latex image too big on tkinter using sympy
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I'm trying to create small images of mathematical forumulas using tkinter, sympy, and latex. The images generated are way too big and I don't know how to reduce the size. When I searched online, people said that using \documentclass{standalone} will make the generated image the minimum size sufficient to fit the contents, but that hasn't happened when I tried it. The images generated seem to be 600 by 800 points no matter what I try. I've tried various things like adding the option [convert={size=25x50}] to the document class and \usepackage[active,tightpage,textmath]{preview} (per this page https://tex.stackexchange.com/questions/...e-any-page ) and \documentclass[tightpage]{standalone} but nothing worked.

I made a test program to experiment:

import tkinter as tk
import sympy as sp
from PIL import Image, ImageTk
from io import BytesIO
import os

def latex(s, label, fontsize=1, height=100, width=300):
    stream = BytesIO()
    sp.preview(r"$%s$\end{document}" % s, euler=False, viewer="BytesIO", output="ps",\
        outputbuffer=stream, premable=r"\documentclass[tightpage]{standalone}\begin{document}") # [convert={size=25x50}]
    image = Image.open(stream)
    image.resize((height, width))
    image.load(scale=fontsize)
    photo = ImageTk.PhotoImage(image)
    label.config(image=photo)
    label.image=photo
    stream.close()

def loadLatex():
    latex(var.get(), label, fontsize=10, height=1, width=2)

win = tk.Tk()
label = tk.Label(win)
var = tk.StringVar()
tk.Entry(win, textvariable=var).grid(row=0, column=0)
tk.Button(win, text="Latex", command=loadLatex).grid(row=1, column=0)
label.grid(row=2, column=0)
win.mainloop()
Hi, 2 observations:

1) your default output is 600x800, that is a classic 3/4.
You seem to resize to 1/3. Maybe it does not matter, but it usually does.

2) I use a different syntax to resize some png cards:

crd = Image.open('cards/' + 'card1.png')
img = ImageTk.PhotoImage(crd.resize((167, 242)))

Hope it helps,
Paul