所以在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)于如何進步的想法:
import matplotlib.pyplot as pltimport sympyx = 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 iofrom PIL import Image, ImageOpsimport matplotlib.pyplot as pltimport sympyx = 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.icode9.com/content-1-260551.html