如何在Jupyter笔记本中显示带有文本和图像的表格?

问题描述 投票:0回答:2

我想在表格中显示图像样本和一些相关的文本信息。

可以在jupyter笔记本中执行此操作吗?

我尝试混合

pandas
PIL
,但没有成功:

import pandas as pd
d = {
    'band1': data.to_images(band_1[random_indices]),
    'band2': data.to_images(band_2[random_indices]),
    'is_iceberg': is_iceberg[random_indices]
    }
pd.DataFrame(data=d)

输出为

即它显示了

__str__
图像,而不是图像本身。

如何克服?

python image html-table jupyter-notebook python-imaging-library
2个回答
10
投票

这个怎么样?

我确信在

escape
中设置
to_html
可能存在一定的安全风险,但如果您知道数据并知道它来自哪里,那么希望不会那么糟糕。如果将
escape
更改为
True
它将不起作用,因为 html 被 pandas 转义了。这会在每一行中设置相同的图像,但可以轻松调整。

from IPython.core.display import display, HTML
import pandas as pd
data = pd.DataFrame({"A":[1,2,3,4,5], "B":[10,20,30,40,50]})
data.loc[:,'img'] = '<img src="Pictures/Capture.PNG" alt="img">'
display(HTML(data.to_html(escape=False)))

[编辑]更好的选择是

from IPython.core.display import display, HTML
from PIL import Image
import cStringIO
import base64
import pandas as pd

img = Image.open("Pictures/Capture.PNG")
img_buffer = cStringIO.StringIO()
img.save(img_buffer, format="PNG")
imgStr = base64.b64encode(img_buffer.getvalue())

data = pd.DataFrame({"A":[1,2,3,4,5], "B":[10,20,30,40,50]})
data.loc[:,'img'] = '<img src="data:image/png;base64,{0:s}">'
html_all = data.to_html(escape=False).format(imgStr)
display(HTML(html_all))


0
投票

我尝试了Tasko Olevski的解决方案,但事实证明它是无效的。这是由于

cStringIo
的弃用。因此,我选择了
BytesIO
并使用
.decode()
对其进行解码以生成
imgStr

from IPython.core.display import display, HTML
from PIL import Image
from io import BytesIO                                       #  Modified
import base64
import pandas as pd

img = Image.open("Pictures/Capture.PNG")
img_buffer = BytesIO()                                       #  Modified
img.save(img_buffer, format="PNG")
imgStr = base64.b64encode(img_buffer.getvalue()).decode()    #  Modified

data = pd.DataFrame({"A":[1,2,3,4,5], "B":[10,20,30,40,50]})
data.loc[:,'img'] = '<img src="data:image/png;base64,{0:s}">'
html_all = data.to_html(escape=False).format(imgStr)
display(HTML(html_all))
© www.soinside.com 2019 - 2024. All rights reserved.