我有一个我正在消耗的函数,它返回一串乳胶代码。我需要从中生成一个图像。我所看到的大部分方法都建议通过 subprocess 模块调用外部应用程序,它将为我生成图像。
然而,管理层并不热衷于此,因为除了我们自己的软件之外,它还需要外部用户安装其他软件,而我们的用户群并不是我们可以认为是一项简单的任务。
那么是否有任何python库可以完成将乳胶转换为可在GUI中显示的格式(如图像文件)的任务?
答案 0 :(得分:17)
SymPy有一个内置的预览功能,可以做到这一点。
expr = sin(sqrt(x**2 + 20)) + 1
preview(expr, viewer='file', filename='output.png')
生成
有lots of options到preview
来更改输出的格式(例如,如果您不喜欢Euler字体,则可以设置euler=False
)。
preview
也接受LaTeX字符串而不是SymPy表达式(如果有的话)
preview(r'$$\int_0^1 e^x\,dx$$', viewer='file', filename='test.png', euler=False)
答案 1 :(得分:12)
在提出问题时可能没有这个答案,但我会在2015年为那些寻求解决方案的人添加答案。
您可以使用matplotlib.pyplot
在带有轴的图形中渲染方程式,然后手动移除轴。您还可以使用sympy
生成乳胶:
#!/usr/bin/env python2.7
import matplotlib.pyplot as plt
import sympy
x = sympy.symbols('x')
y = 1 + sympy.sin(sympy.sqrt(x**2 + 20))
lat = sympy.latex(y)
#add text
plt.text(0, 0.6, r"$%s$" % lat, fontsize = 50)
#hide axes
fig = plt.gca()
fig.axes.get_xaxis().set_visible(False)
fig.axes.get_yaxis().set_visible(False)
plt.draw() #or savefig
plt.show()
使用sympy 0.7.6
和matplotlib 1.4.3
答案 2 :(得分:4)
看看mathtex。
答案 3 :(得分:0)
您将需要使用LaTeX来处理字符串。渲染LaTex / TeX的过程非常复杂(它通常需要100 + MB的包来完成工作),你只是不能在一个小的python模块中完成工作。
答案 4 :(得分:0)
也许你可以使用这样的在线服务:http://www.codecogs.com/components/equationeditor/equationeditor.php。
按照Joel A. Christophel的建议,这是一个类似网站的工作:http://arachnoid.com/latex/
答案 5 :(得分:0)
如果只是你需要的数学方程式,你可能会更好地在python中找到一个mathml渲染器。这个page可能会提供一些线索,包括一些latex-mathml翻译器。
答案 6 :(得分:0)
这是我经常使用的有点难看的解决方案,但我发现在很多情况下使用它最简单。
import matplotlib.pyplot as plt
import io
from PIL import Image, ImageChops
white = (255, 255, 255, 255)
def latex_to_img(tex):
buf = io.BytesIO()
plt.rc('text', usetex=True)
plt.rc('font', family='serif')
plt.axis('off')
plt.text(0.05, 0.5, f'${tex}$', size=40)
plt.savefig(buf, format='png')
plt.close()
im = Image.open(buf)
bg = Image.new(im.mode, im.size, white)
diff = ImageChops.difference(im, bg)
diff = ImageChops.add(diff, diff, 2.0, -100)
bbox = diff.getbbox()
return im.crop(bbox)
latex_to_img(r'\frac{x}{y^2}').save('img.png')
请记住,它需要枕头和matplotlib。
pip install matplotlib pillow