如何从本地计算机或Web资源将图像或图片嵌入jupyter笔记本中?


304

我想将图像包括在Jupyter笔记本中。

如果我执行以下操作,则它会起作用:

from IPython.display import Image
Image("img/picture.png")

但是我想将图像包含在markdown单元格中,以下代码给出404错误:

![title]("img/picture.png")

我也试过

![texte]("http://localhost:8888/img/picture.png")

但是我仍然得到同样的错误:

404 GET /notebooks/%22/home/user/folder/img/picture.png%22 (127.0.0.1) 2.74ms referer=http://localhost:8888/notebooks/notebook.ipynb

Answers:


306

在markdown中,不得在图像文件名称的前后加上引号!

如果您仔细阅读错误消息,您将%22在链接中看到两个部分。那是html编码的引号。

你必须换线

![title]("img/picture.png")

![title](img/picture.png)

更新

假定您具有以下文件结构,并且您jupyter notebook在存储文件的目录example.ipynb(<-包含映像的标记)中运行 命令:

/
+-- example.ipynb
+-- img
    +-- picture.png

8
对我来说,以html格式下载笔记本时,这不起作用。它显示了损坏的图像链接。使用IPython.display.Image按预期方式。
joelostblom

7
@cheflo上面的语法不会将图像嵌入 html文件中。如果您查看html文件的源代码,则会找到类似<img src =“ img / picture.png” alt =“标题”>的条目。要查看图片,您必须将其复制到相对的文件夹中img到html文件。
塞巴斯蒂安·斯蒂格勒

1
我怀疑情况就是如此,感谢您的澄清。我认为这两种方法之间的差异是出乎意料的,至少对我而言,它决定了选择哪种方法,因此我想引起注意。
joelostblom '16

3
通过markdown进行操作时,请确保图像文件位于笔记本计算机所在的目录中,出于某些奇怪的原因(在我的情况下),jupyter-notebook未被说服使用完整路径... ![title](picture.png)
Arun Kumar Khattri

2
@ArunKumarKhattri-有相同的问题,只有笔记本的重复路径有效-在我的情况下:![title](../ img / picture.png)
ohad edelstain

209

有几种方法可以在Jupyter笔记本中发布图像:

通过HTML:

from IPython.display import Image
from IPython.core.display import HTML 
Image(url= "http://my_site.com/my_picture.jpg")

您保留使用HTML标签调整大小等的功能。

Image(url= "http://my_site.com/my_picture.jpg", width=100, height=100)

您还可以通过相对或绝对路径显示本地存储的图像。

PATH = "/Users/reblochonMasque/Documents/Drawings/"
Image(filename = PATH + "My_picture.jpg", width=100, height=100)

如果图像宽于显示设置: 谢谢

用于unconfined=True禁用图像的最大宽度限制

from IPython.core.display import Image, display
display(Image('https://i.ytimg.com/vi/j22DmsZEv30/maxresdefault.jpg', width=1900, unconfined=True))

或通过降价:

  • 确保该单元格是降价单元格,而不是代码单元格,感谢@游凯超在评论中)
  • 请注意,在某些系统上,降价标记不允许在文件名中使用空格。感谢评论中的@CoffeeTableEspresso和@zebralamy)
    (在macOS上,只要您位于降价单元格上,您就可以这样做:![title](../image 1.png),而不必担心空白)。

对于网络图像:

![Image of Yaktocat](https://octodex.github.com/images/yaktocat.png)

如@cristianmtr所示。请注意不要同时使用这些引号""''网址中的引号。

或本地的:

![title](img/picture.png)

由@Sebastian演示


的确,调整图片大小的可能性很有趣。但是对于将来的渲染,降价对我来说更好。
GER

3
您可以通过markdown放置具有绝对路径的本地路径吗?我试过了,但似乎没有用。编辑:Firefox(和Chrome)不允许访问本地文件以确保安全
CiprianTomoiagă17年

2
@SwimBikeRun,您应该选择正确的单元格类型。您当前的单元格类型必须是代码
youkaichao '18

1
被低估的答案。非常彻底
内森(Nathan)

1
markdown版本不允许文件名中的空格,对于
遇到

57

另外,您可以使用纯HTML <img src>,它允许您更改高度和宽度,并仍由markdown解释器读取:

<img src="subdirectory/MyImage.png" width=60 height=60 />

3
大!我更喜欢这个答案,因为我们可以控制输出大小!例如,在使用鹈鹕工具将jupyter笔记本发布为静态html页面时,这一点很重要。
斯文德(Svend)

7
HTML不需要逗号-只需在属性之间放置一个空格即可-建议在所有属性值(例如)周围加上引号width="60"
Colllin '18

神圣的 这真是太棒了
Tessaracter

是的,它很棒:),但是...该图像在PDF版本中丢失。太糟糕了。
6

21

我知道这并不完全相关,但是由于当您搜索“ 如何在Jupyter中显示图像 ”时,此答案多次排名第一,因此也请考虑此答案。

您可以使用matplotlib如下显示图像。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
image = mpimg.imread("your_image.png")
plt.imshow(image)
plt.show()


19

除了使用HTML的其他答案(在Markdown中或使用%%HTML魔术:

如果您需要指定图像高度,则将无法使用:

<img src="image.png" height=50> <-- will not work

这是因为Jupyter中的CSS样式height: auto默认情况下会使用img标签来覆盖HTML高度属性。您需要改写CSS height属性:

<img src="image.png" style="height:50px"> <-- works

18

将图像直接插入Jupyter笔记本中。

注意:您应该在计算机上拥有图像的本地副本

您可以将图像插入Jupyter笔记本本身。这样,您无需将图像单独保存在文件夹中。

脚步:

  1. 将单元格转换为markdown

    • 在所选单元格上按M

    • 在菜单栏中,单元格>单元格类型>降价。
      注意:将单元格转换为Markdown非常重要,否则,第2步中的“插入图片”选项将无效)
  2. 现在转到菜单栏,然后​​选择编辑->插入图像。

  3. 从磁盘中选择图像并上传。

  4. Ctrl+ EnterShift+ Enter

这将使图像成为笔记本的一部分,您无需在目录或Github中上传。我觉得这看起来更干净,而且不容易出现URL损坏的问题。


救了我!,谢谢
Mohammad Heydari '19

的开发人员添加了另一个有用的功能Jupyter。要注意的一个不利方面是,在这种情况下很重要:它会将图像包含在IPyNB Jason代码中,从而使图像更大,并且不便于代码修订(例如,检查diffs时)。
eldad-a

13

使用Markdown的方法如下:

![Image of Yaktocat](https://octodex.github.com/images/yaktocat.png)

1
由于某些原因,通过markdown显示图像对我不起作用...您确定语法正确cristianmtr吗?
Reblochon Masque 2015年

1
是的,再次测试一下。您确定将单元格设置为Markdown吗?另外,您正在使用哪个版本的IPython / Jupyter?Mine说:“笔记本电脑服务器的版本是4.0.4,并且运行在:Python 2.7.8(默认值,2014年6月30日,16:08:48)[MSC v.1500 64位(AMD64)]”这是一个结果的屏幕截图:i.imgur.com/4ISJFDE.png
cristianmtr

当心路径,在本地有效的方法无法在线运行,.e。imgs \ pic.png在本地工作,而在线则为1:区分大小写(Pic.png)2:后退和斜杠不同...:/ –
Intelligent-Infrastructure

在Python 3.8中效果很好。谢谢
jamescampbell

如果其他人
遇到

12
  1. 将单元格模式设置为降价
  2. 将图像拖放到单元格中。将创建以下命令:

![image.png](attachment:image.png)

  1. 执行/运行单元格,图像出现。

该图像实际上是嵌入在ipynb笔记本中的,您无需弄乱单独的文件。不幸的是,这还不适用于Jupyter-Lab(v 1.1.4)。

编辑:在JupyterLab版本1.2.6中工作


1
是的,当我想下载HTML时,我收到错误消息“ nbconvert失败:附件丢失:imagen.png”。为什么?
efueyo

从剪贴板粘贴图像也对我Markdown
有用

10

如果要使用Jupyter Notebook API(现在不再使用IPython),则可以找到ipywidgets Jupyter的子项目。您有一个Image小部件。Docstring指定您有value一个字节参数。因此,您可以执行以下操作:

import requests
from ipywidgets import Image

Image(value=requests.get('https://octodex.github.com/images/yaktocat.png').content)

我同意,使用Markdown样式更简单。但是它向您显示了图像显示Notebook API。您还可以使用widthheight参数调整图像的大小。


在此期间,选项似乎value已重命名为data。对于本地存储的图像,代码Image(data=open(filename_png, 'rb').read())对我有用。
jottbe

7

这是JupyterPython3的解决方案:

我将图像放在名为的文件夹中ImageTest。我的目录是:

C:\Users\MyPcName\ImageTest\image.png

为了显示图像,我使用了以下表达式:

![title](/notebooks/ImageTest/image.png "ShowMyImage")

还要注意/\


这只对我有用。谢谢!“ ShowMyImage”的工作原理很吸引人!
Pranzell '19

4

这在降价单元中对我有用。无论如何,如果图像或简单文件,我都无需特别提及。

![](files/picture.png)

它与塞巴斯蒂安·斯蒂格勒(Sebastian Stigler)的答案有何不同?
iNet

1
只是想强调一下它对我有用,而没有在方括号中包含标题。没什么不同。
普拉纳夫·潘迪特

2

我发现的一件事是,图像的路径必须与笔记本计算机最初加载的位置有关。如果您将CD转到其他目录,例如“图片”,则Markdown路径仍相对于原始加载目录。


0

同意,我遇到了同样的问题,这是可行的,而没有奏效的:

WORKED: <img src="Docs/pinoutDOIT32devkitv1.png" width="800"/>
*DOES NOT WORK: <img src="/Docs/pinoutDOIT32devkitv1.png" width="800"/>
DOES NOT WORK: <img src="./Docs/pinoutDOIT32devkitv1.png" width="800"/>*

0

尽管上面的许多答案都提供了使用文件或Python代码嵌入图像的方法,但是有一种方法可以仅使用markdown和base64将图像嵌入jupyter笔记本本身!

要在浏览器中查看图像,您可以访问data:image/png;base64,**image data here**以base64编码的PNG图像或data:image/jpg;base64,**image data here**以base64编码的JPG图像的链接。在此答案的末尾可以找到一个示例链接。

要将其嵌入到markdown页面中,只需使用与文件Answers类似的结构,但要使用base64链接:![**description**](data:image/**type**;base64,**base64 data**)。现在,您的图像已100%嵌入到Jupyter Notebook文件中!

示例链接: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAD9JREFUGJW1jzEOADAIAqHx/1+mE4ltNXEpI3eJQknCIGsiHSLJB+aO/06PxOo/x2wBgKR2jCeEy0rOO6MDdzYQJRcVkl1NggAAAABJRU5ErkJggg==

降价示例: ![smile](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAD9JREFUGJW1jzEOADAIAqHx/1+mE4ltNXEpI3eJQknCIGsiHSLJB+aO/06PxOo/x2wBgKR2jCeEy0rOO6MDdzYQJRcVkl1NggAAAABJRU5ErkJggg==)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.