所以在python中我有以下代碼,取自this answer:
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.savefig('out.png', bbox_inches='tight', pad_inches=0)
plt.show()
這將打開文本并將其導(dǎo)出到png文件中:

但這包括超出框架外的空白的空白.您將如何裁剪圖像以僅導(dǎo)出文本,如邊界框,如此?

解決方法: 以下不是一個完美的解決方案,但它希望能給你一些關(guān)于如何進(jìn)步的想法:
import matplotlib.pyplot as plt
import sympy
x = sympy.symbols('x')
y = 1 sympy.sin(sympy.sqrt(x**2 2))
lat = sympy.latex(y)
fig = plt.figure()
renderer = fig.canvas.get_renderer()
t = plt.text(0.001, 0.001, r"$%s$" % lat, fontsize = 50)
wext = t.get_window_extent(renderer=renderer)
fig.set_size_inches(wext.width / 65, wext.height / 40, forward=True)
fig.patch.set_facecolor('white')
plt.axis('off')
plt.tight_layout()
plt.savefig('out.png', bbox_inches='tight', pad_inches=0)
plt.show()
您可以通過使用當(dāng)前渲染器獲取窗口范圍來確定文本大小.然后還可以手動指定圖形尺寸.我雖然不確定正確的方法來轉(zhuǎn)換兩者之間.請注意,我為圖像添加了邊框,以便您可以看到剩余填充量:

作為解決此問題的可能方法,以下方法僅使用Python的PIL庫在保存之前自動裁剪圖像:
import io
from PIL import Image, ImageOps
import matplotlib.pyplot as plt
import sympy
x = sympy.symbols('x')
y = 5 /sympy.sqrt(1 sympy.sin(sympy.sqrt(x**2 2)))
lat = sympy.latex(y)
fig = plt.figure()
t = plt.text(0.001, 0.001, r"$%s$" % lat, fontsize = 50)
fig.patch.set_facecolor('white')
plt.axis('off')
plt.tight_layout()
with io.BytesIO() as png_buf:
plt.savefig(png_buf, bbox_inches='tight', pad_inches=0)
png_buf.seek(0)
image = Image.open(png_buf)
image.load()
inverted_image = ImageOps.invert(image.convert("RGB"))
cropped = image.crop(inverted_image.getbbox())
cropped.save('out.png')
來源:https://www./content-1-260551.html
|