分享

python – Matplotlib只保存没有空格的文本

 印度阿三17 2019-06-23

所以在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()

这将打开文本并将其导出到png文件中:

Image Export 1

但这包括超出框架外的空白的空白.您将如何裁剪图像以仅导出文本,如边界框,如此?

enter image description here

解决方法:

以下不是一个完美的解决方案,但它希望能给你一些关于如何进步的想法:

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()

您可以通过使用当前渲染器获取窗口范围来确定文本大小.然后还可以手动指定图形尺寸.我虽然不确定正确的方法来转换两者之间.请注意,我为图像添加了边框,以便您可以看到剩余填充量:

matplotlib output

作为解决此问题的可能方法,以下方法仅使用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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多