如何在Jupyter笔记本中嵌入gif?

29

我一直在试图在Jupyter笔记本中显示一个gif图像,但一直遇到问题。我一直得到一个空白的图像文件。

我尝试使用这个GitHub存储库中的html。

![wignerfunction][1](../gifs/wigner_rotation_animate.gif "wigner")

from IPython.display import Image
Image(url='example.gif')  

到目前为止,以上所有方法都没有奏效。

谢谢。


GIF文件的文件名是什么,它在磁盘上存在哪里?你是否提供了完整路径而不是相对路径? - OneCricketeer
文件名为:wigner_rotation_animate.gif - iiooii
这看起来像是Mac上的相对路径。尝试在前面加上斜杠,使其变成绝对路径? - Const
我仍然得到了一张空白的图片。顺便感谢你的帮助。 - iiooii
可能是如何在Jupyter笔记本中包含图像或图片的重复问题。 - Reblochon Masque
显示剩余4条评论
7个回答

37

我一直在尝试在Jupyter笔记本中显示一个gif,但遇到了一些问题。

要在笔记本中显示gif,您可以在Markdown单元格中使用行内标记,如下所示:

  • 与ipynb笔记本文件位于同一文件夹中的相对引用:

    ![SegmentLocal](191px-Seven_segment_display-animated.gif "segment")
    
  • 在ipynb笔记本文件所在文件夹中,从子文件夹图片的相对引用:

  • ![SegmentLocal](images/191px-Seven_segment_display-animated.gif "segment")
    
  • 无论笔记本文件的位置如何,都可以从根文件夹进行绝对引用:

  • ![SegmentLocal](/Users/username/some-folder/191px-Seven_segment_display-animated.gif "segment")
    
  • URL参考(应该在您的笔记本中即可使用):

  • ![ChessUrl](https://upload.wikimedia.org/wikipedia/commons/7/71/ChessPawnSpecialMoves.gif "chess")
    

例如,由于Stack Overflow也使用Markdown语言,如果最后一行文本引用了一个URL:![ChessUrl](https://upload.wikimedia.org/wikipedia/commons/7/71/ChessPawnSpecialMoves.gif "chess"),但是不作为代码引用,则将显示如下图像:

ChessUrl

这个图像也应该在你的jupyter笔记本中正确显示。如果你可以看到这个图像,但是不能从本地文件中找到它,那么你很可能是有破损的GIF文件、权限问题或文件路径不正确。


当我输入:![SegmentLocal](/Users/tommylees/Downloads/video2.gif "segment")时,我会得到以下错误:
  • /bin/sh: -c: line 0: syntax error near unexpected token /Users/tommylees/Downloads/video2.gif
  • /bin/sh: -c: line 0: SegmentLocal'`
- Tommy Lees
3
你需要将单元格类型设置为Markdown格式。也许这应该在主要注释中加以强调。 - Matt07
嗯,在答案的第一句话中已经明确说明了... - Const
有没有办法在Markdown中使用这种符号来将gif居中显示,设置样式偏好(宽度等),而不是使用IPython.display? - Slash

11

当我需要在jupyter笔记本中包含gif动画时,我会按照以下步骤进行:

<img src="FileName.gif" width="750" align="center">

宽度和对齐参数由您定义。

谢谢。


6

在某些情况下,您需要将 gif 文件嵌入到 Jupyter 笔记本中,即使您的磁盘上的 gif 文件已被删除,该 gif 在 Jupyter 笔记本中仍然可以正常工作。@user13013261 的解决方案可能会失败,并且 @Const 的解决方案仅适用于 Markdown 单元格。

您可以尝试以下方法:

display(Image(data=open(gif_path,'rb').read(), format='png'))

或者
import base64
b64 = base64.b64encode(open(gif_path,'rb').read()).decode('ascii')
display(HTML(f'<img src="data:image/gif;base64,{b64}" />'))

Reference:
https://github.com/ipython/ipython/issues/10045#issuecomment-318202267 https://github.com/ipython/ipython/issues/10045#issuecomment-642640541


这个方法可行。那些得票更高的答案对我没用,因为它们会加载一个 GIF,然后它就会被缓存,再也不会被加载了。这是有问题的,因为我实际上是通过编程创建 GIF 的,所以不希望它被缓存。 - JnBrymn
从 IPython.display 导入 HTML - Claude COULOMBE

2

我发现唯一能在笔记本上显示gif图像的解决方案可以在这里找到。

对于外部的gif图像,您可以使用Jupyter的display功能。

from IPython.display import Image
Image(url='https://upload.wikimedia.org/wikipedia/commons/e/e3/Animhorse.gif')

但对于本地文件,您需要读取字节并显示它。

!wget https://upload.wikimedia.org/wikipedia/commons/e/e3/Animhorse.gif
Image(open('Animhorse.gif','rb').read())

这个来自@korakot的答案对我帮助很大,因为我已经尝试了这里发布的每一个解决方案,但都没有在我的Kaggle笔记本上起作用。


0
import ipywidgets as widgets
display(widgets.HTML(f'<img src="{gif_file}" width="750" align="center">'))

0

还没有找到一种解决方案,可以将在笔记本内生成的更新后的 GIF 嵌入其中。以下是方法:

安装 tensorflow/docs pip install git+https://github.com/tensorflow/docs,然后

import tensorflow_docs.vis.embed as embed
embed.embed_file('output.gif')

-1

如果您想在Python Jupyter笔记本中显示任何图像格式,如png、jpg、jpeg或gif等,请使用matplotlib库。

import matplotlib.pyplot as plt

import matplotlib.image as mpimg

img = mpimg.imread("/home/gaurav/assignment/sofcomputing/river.gif")

plt.imshow(img)

4
如果没有安装“Pillow”,那么这段代码将无法正常工作。您会收到以下错误消息:“ValueError: Only know how to handle extensions: ['png']; with Pillow installed matplotlib can handle more images”。这是因为在新环境中,“imread”只能处理“png”格式的图片。更可靠、更简短的方式是使用标准库“IPython.display”的“Image”模块,代码如下:from IPython.display import Image;Image("/home/gaurav/assignment/sofcomputing/river.gif")。 - Wayne
1
当我尝试使用Matplotlib的方法时,GIF不会动画显示。(它是在x-y轴上绘制的,所以我并不惊讶。)使用'IPython.display.Image'方法可以显示具有动画效果的GIF。这应该是一个答案,因为它将图形放置在可执行单元格输出中,而不是Markdown中,与其他答案不同。 - Jim Pivarski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接