将图像嵌入到jupyter笔记本中并导出为HTML

时间:2018-08-22 21:54:14

标签: jupyter-notebook jupyter

我正在Windows上使用pycharm运行Python 3.7。我有一个Jupyter笔记本,我想将图像嵌入到笔记本中。我知道使用markdown语言进行标准嵌入的所有方式,但理想情况是我想要的是:

a。通过markdown语言嵌入图像,即笔记本单元处于'markdown'状态,而不是'Code'状态,并且

b。能够将其导出为HTML并在HTML文件中保留该图像。即在笔记本上。我要单击文件->下载为-> HTML(.html),将笔记本文件保存为.html格式,然后将其发送给好友时,附上的图像位于笔记本,他看到了。

我知道我可以在一个单元格(“代码”)中做到这一点:

char

但我不想使用“代码”,因为当我发送给好友时,他将在笔记本html文件中看到from IPython.display import Image Image(filename="myfile.jpg") 代码语句和图像的In []

注意::这是笔记本电脑上的图像,需要在html格式的导出笔记本中使用。在网络上,他无法通过www类型声明来引用它。除非我发疯,否则无法通过单元格中的markdown命令执行此操作,唯一的方法(将图像“永久”嵌入到笔记本的.html格式中)是通过单元格处于“代码”单元格类型。

3 个答案:

答案 0 :(得分:2)

我的完整解决方案基于Milania和

代码

    import base64, io, IPython
    from PIL import Image as PILImage

    image = PILImage.open(image_path)

    output = io.BytesIO()
    image.save(output, format='PNG')
    encoded_string = base64.b64encode(output.getvalue()).decode()

    html = '<img src="data:image/png;base64,{}"/>'.format(encoded_string)
    IPython.display.HTML(html)

答案 1 :(得分:1)

当您使用代码单元显示图像,然后将笔记本导出到HTML文件时,图像将转换为Base64,并且在src标签的<img>属性中直接使用代码。您可以对markdown单元格中包含的图像应用相同的过程。

  1. 首先,将您的图片编码为Base64,例如通过使用online enocders之一。
  2. 创建一个降价单元格并包含一个<img>标记,该标记使用您的Base64代码,例如:

    <img src="data:image/png;base64,CODE_FOLLOWS_HERE" />
    
  3. 评估单元格,您应该已经看到了图像。

如果您现在将笔记本导出为HTML,则图像应与来自代码单元格的图像一样包含在文件中。

此方法的唯一缺点是Markdown单元的(可能很长)Base64代码变得混乱。但是,这例如可以通过管理。使用专门用于图片的降价单元,而没有其他内容。

答案 2 :(得分:1)

您可以安装Unofficial Jupyter Notebook Extensions

它具有一些有趣的扩展名(例如拼写检查器,可折叠标题等)。扩展名之一是Export HTML With Embedded Images,它可以完全满足您的需求。

要使用pip安装Nbextensions,请执行以下操作:

$ pip install jupyter_contrib_nbextensions
$ pip install jupyter_nbextensions_configurator
$ jupyter contrib nbextension install --user 
$ jupyter nbextensions_configurator enable --user

然后,您将在Jupyter主页中看到一个新标签(Nbextensions),您可以在其中启用和配置其他扩展名。

启用“用嵌入式图像导出HTML”后,您将在“文件下载为”菜单中看到相应的选项。