我有一个我正在消耗的函数,它返回一串乳胶代码.我需要从中生成一个图像.我所看到的大多数方法建议通过子进程模块调用外部应用程序,这将为我生成映像.
但是,管理层并不热衷于此,因为除了我们自己的用户之外,它还需要外部用户安装额外的软件,而我们的用户群并不是我们可以认为是一项简单的任务.
那么是否有任何python库可以完成将乳胶转换为可在GUI中显示的格式(如图像文件)的任务?
asm*_*rer 19
SymPy有一个内置预览功能,可以做到这一点.
expr = sin(sqrt(x**2 + 20)) + 1
preview(expr, viewer='file', filename='output.png')
Run Code Online (Sandbox Code Playgroud)
生成
有很多选项可以preview
更改输出的格式(例如,如果您不喜欢可以设置的Euler字体euler=False
).
preview
如果你有的话,也接受一个LaTeX字符串而不是SymPy表达式
preview(r'$$\int_0^1 e^x\,dx$$', viewer='file', filename='test.png', euler=False)
Run Code Online (Sandbox Code Playgroud)
mul*_*sen 13
在提出问题时可能没有这个答案,但我会在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()
Run Code Online (Sandbox Code Playgroud)
用sympy 0.7.6
和matplotlib 测试1.4.3
这是我经常使用的有点丑陋的解决方案,但我发现在很多情况下它最容易使用。
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')
Run Code Online (Sandbox Code Playgroud)
请记住,它需要枕头和 matplotlib。
pip install matplotlib pillow
Run Code Online (Sandbox Code Playgroud)
您将需要使用 LaTeX 来处理字符串。渲染 LaTex/TeX 的过程非常复杂(通常需要 100+MB 的包才能完成工作),您只是无法投入一个小 python 模块来完成工作。
归档时间: |
|
查看次数: |
8568 次 |
最近记录: |