ale*_*xis 16 ipython ipython-notebook
我有一个ipython笔记本,带有我本地驱动器的嵌入式图像.我期待它与代码单元的输出一起嵌入JSON中,但是当我分发笔记本时,图像并没有出现在用户身上.在Notebook中嵌入图像的推荐方法是什么,如果用户重新运行代码单元,清除单元格输出等,它不会消失?
笔记本系统缓存包含的图像,但它们仅持续到重新启动服务于笔记本的python"内核".如果我重命名磁盘上的图像文件,我可以关闭并重新打开笔记本,它仍然显示图像; 但是当我重新启动内核时它会消失.
编辑:如果我生成一个图像作为代码单元格输出,然后将笔记本导出为html,图像嵌入在html中作为编码数据.当然必须有一种方法来挂钩这个功能并将输出加载到降价(或更好的"原始nbconvert")单元格?
from IPython.display import Image
Image(filename='imagename.png')
Run Code Online (Sandbox Code Playgroud)
将导出(with ipython nbconvert)到包含以下内容的html:
<div class="output_png output_subarea output_execute_result">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnAAAAFgCAYAAAA...
</div>
Run Code Online (Sandbox Code Playgroud)
但是,即使我手动将此片段嵌入到markdown单元格中,也无法显示图像.我究竟做错了什么?
PS现有(旧)答案提供了一些非常有用的指针,但不是解决方案.
您是否乐意使用额外的代码单元来显示图像?如果是这样,请使用:
from IPython.display import Image
Image(filename="example.png")
Run Code Online (Sandbox Code Playgroud)
输出单元格将原始图像数据嵌入.ipynb文件中,以便您可以共享它并保留图像.
请注意,Image该类还有一个url关键字,但这只会链接到图像,除非您还指定embed=True(有关详细信息,请参阅文档).因此,filename除非您在远程服务器上引用图像,否则使用该关键字会更安全.
如果您需要将图像包含在Markdown单元格中,即不需要单独的代码单元来生成嵌入的图像数据,我不确定是否有简单的解决方案.您可以使用python markdown扩展,它允许在markdown单元格中动态显示Python变量的内容.但是,扩展会动态生成markdown单元格,因此为了在共享笔记本时保留输出,您需要ipython nbconvert --to notebook original_notebook.ipynb --output preprocessed_notebook使用pymdpreprocessor.py"安装"一节中提到的预处理器运行.然后,生成的笔记本将数据嵌入在markdown单元格中作为表单的HTML标记,<img src="data:image/png;base64,...">以便您可以从中删除相应的代码单元格preprocessed_notebook.ipynb.不幸的是,当我尝试这个时,<img>标签的内容实际上并没有显示在浏览器中,所以不确定这是否是一个可行的解决方案.: - /
另一种选择是使用Image代码单元格中的类来生成上面的图像,然后使用nbconvert自定义模板从笔记本中删除代码输入单元格.有关详情,请参阅此主题.但是,这将从转换后的笔记本中删除所有代码单元格,因此可能不是您想要的.
我发现将 中的图像 URL 替换为Base64 URL(类似于上面的 URL)可以将图像嵌入到 Markdown 容器中。
降价示例:

Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9098 次 |
| 最近记录: |