How to embed image or picture in jupyter notebook, either from a local machine or from a web resource?

PythonPython 3.xImageJupyter NotebookJupyter

Python Problem Overview


I would like to include image in a jupyter notebook.

If I did the following, it works :

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

But I would like to include the images in a markdown cell and the following code gives a 404 error :

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

I also tried

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

But I still get the same error :

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

Python Solutions


Solution 1 - Python

You mustn't use quotation marks around the name of the image files in markdown!

If you carefully read your error message, you will see the two %22 parts in the link. That is the html encoded quotation mark.

You have to change the line

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

to

title

UPDATE

It is assumed, that you have the following file structure and that you run the jupyter notebook command in the directory where the file example.ipynb (<-- contains the markdown for the image) is stored:

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

Solution 2 - Python

There are several ways to post an image in Jupyter notebooks:

via HTML:

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

You retain the ability to use HTML tags to resize, etc...

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

You can also display images stored locally, either via relative or absolute path.

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

if the image it wider than the display settings: thanks

use unconfined=True to disable max-width confinement of the image

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

or via markdown:

  • make sure the cell is a markdown cell, and not a code cell, thanks @游凯超 in the comments)
  • Please note that on some systems, the markdown does not allow white space in the filenames. Thanks to @CoffeeTableEspresso and @zebralamy in the comments)
    (On macos, as long as you are on a markdown cell you would do like this: ![title](../image 1.png), and not worry about the white space).

for a web image:

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

as shown by @cristianmtr Paying attention not to use either these quotes "" or those '' around the url.

or a local one:

![title](img/picture.png)

demonstrated by @Sebastian

Solution 3 - Python

Alternatively, you can use a plain HTML <img src>, which allows you to change height and width and is still read by the markdown interpreter:

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

Solution 4 - Python

Insert the image directly in the Jupyter notebook.

Note: You should have a local copy of the image on your computer

You can insert the image in the Jupyter notebook itself. This way you don't need to keep the image separately in the folder.

Steps:

  1. Convert the cell to markdown by:
  • pressing M on the selected cell
    OR
  • From menu bar, Cell > Cell Type > Markdown.
    (Note: It's important to convert the cell to Markdown, otherwise the "Insert Image" option in Step 2 will not be active)
  1. Now go to menu bar and select Edit -> Insert Image.

  2. Select image from your disk and upload.

  3. Press Ctrl+Enter or Shift+Enter.

This will make the image as part of the notebook and you don't need to upload in the directory or Github. I feel this looks more clean and not prone to broken URL issue.

Solution 5 - Python

I know this is not fully relevant, but since this answer is ranked first many a times when you search 'how to display images in Jupyter', please consider this answer as well.

You could use matplotlib to show an image as follows.

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

Solution 6 - Python

  1. Set cell mode to Markdown
  2. Drag and drop your image into the cell. The following command will be created:

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

  1. Execute/Run the cell and the image shows up.

The image is actually embedded in the ipynb Notebook and you don't need to mess around with separate files. This is unfortunately not working with Jupyter-Lab (v 1.1.4) yet.

Edit: Works in JupyterLab Version 1.2.6

Solution 7 - Python

I'm surprised no one here has mentioned the html cell magic option. from the docs (IPython, but same for Jupyter)

> %%html > > Render the cell as a block of HTML

Solution 8 - Python

In addition to the other answers using HTML (either in Markdown or using the %%HTML magic:

If you need to specify the image height, this will not work:

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

That is because the CSS styling in Jupyter uses height: auto per default for the img tags, which overrides the HTML height attribute. You need need to overwrite the CSS height attribute instead:

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

Solution 9 - Python

Here's how you can do it with Markdown:

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

Solution 10 - Python

If you want to use the Jupyter Notebook API (and not the IPython one anymore), I find the ipywidgets Jupyter's sub-project. You have an Image widget. Docstring specifies that you have a value parameter which is a bytes. So you can do:

import requests
from ipywidgets import Image

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

I agree, it's simpler to use the Markdown style. But it shows you the Image display Notebook API. You can also resize the image with the width and height parameters.

Solution 11 - Python

Here is a Solution for Jupyter and Python3:

I droped my images in a folder named ImageTest. My directory is:

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

To show the image I used this expression:

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

Also watch out for / and \

Solution 12 - Python

While a lot of the above answers give ways to embed an image using a file or with Python code, there is a way to embed an image in the jupyter notebook itself using only markdown and base64!

To view an image in the browser, you can visit the link data:image/png;base64,**image data here** for a base64-encoded PNG image, or data:image/jpg;base64,**image data here** for a base64-encoded JPG image. An example link can be found at the end of this answer.

To embed this into a markdown page, simply use a similar construct as the file answers, but with a base64 link instead: ![**description**](data:image/**type**;base64,**base64 data**). Now your image is 100% embedded into your Jupyter Notebook file!

Example link: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAD9JREFUGJW1jzEOADAIAqHx/1+mE4ltNXEpI3eJQknCIGsiHSLJB+aO/06PxOo/x2wBgKR2jCeEy0rOO6MDdzYQJRcVkl1NggAAAABJRU5ErkJggg==

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

Solution 13 - Python

This works for me in a markdown cell. Somehow I do not need to mention specifically if its an image or a simple file.

![](files/picture.png)

Solution 14 - Python

One thing I found is the path of your image must be relative to wherever the notebook was originally loaded from. if you cd to a different directory, such as Pictures your Markdown path is still relative to the original loading directory.

Solution 15 - Python

For some reason no other solutions work for me. Here what is working:

  1. Change cell to markdown
  2. Copy past:

<div>
<img src="attachment:name.png" width="600"/>
</div>

  1. Drop your image using mouse to the same cell.
  2. You will see something like that: ![yourname.jpg](attachment:yourname.jpg)
  3. Copy yourname.jpg and past it instead of name.png
  4. Remove ![yourname.jpg](attachment:yourname.jpg).
  5. The final result should look like:

<div>
<img src="attachment:yourname.jpg" width="600"/>
</div>

  1. Run sell and you will your image

Solution 16 - Python

I'm assuming you mean in a markdown cell, inside a jupyter notebook. If so, here are the easiest ways for both:

From the local computer:

With your file browser, navigate to the directory containing your picture. Then, drag and drop it into the cell you want to embed the picture. It must already be in markdown mode or nothing will happen.

The pros of doing it this way are:

  • It's simple, just drag and drop

The cons of doing it this way:

  • You cannot copy and paste that link, and use it in any other cell. If you want to use the same picture in any other notebook cell, you will need to find the picture, drag and drop into the cell again.

  • You should consider a file management scheme that will allow you to find a picture again, if you plan on using allot of pictures in your notebooks.

This is an effective way of doing things that's worked for me.

From the web:

The easiest way is to simply find a picture using your web browser, right click and "Copy image", paste this into the cell you want the image displayed.

As above this does come with caveats in that you can't copy this and link and paste it into another cell. So if you plan on using the image again, you'll have to either paste into another cell, or save this image locally.

The images are embedded in the notebook so should work anywhere the notebook is opened.

Solution 17 - Python

Insert images that are present locally

Quick Solution : Watch this Video (1:36) https://www.youtube.com/watch?v=Vw1EZh1My8s


In short :

  1. Go to the location where your .ipynb is present.
  2. Create folder called images and paste image that you want insert in jupyter in that images folder
  3. Open .ipynb file on browser and there click on cell and type : title
  4. There is a dropdown button which is mentioned as Code. Change that to Markdown
  5. Hurray!! Now run the code by hitting shift + Enter

Reference image

enter image description here

Solution 18 - Python

Agreed, i had the same issues and this is what worked and what did not:

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"/>*

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGerView Question on Stackoverflow
Solution 1 - PythonSebastian StiglerView Answer on Stackoverflow
Solution 2 - PythonReblochon MasqueView Answer on Stackoverflow
Solution 3 - PythonAlistairView Answer on Stackoverflow
Solution 4 - PythonGaurav ModiView Answer on Stackoverflow
Solution 5 - PythoncodeslordView Answer on Stackoverflow
Solution 6 - PythonPeterView Answer on Stackoverflow
Solution 7 - PythonMalik A. RumiView Answer on Stackoverflow
Solution 8 - PythonRveView Answer on Stackoverflow
Solution 9 - PythoncristianmtrView Answer on Stackoverflow
Solution 10 - PythondagView Answer on Stackoverflow
Solution 11 - PythonBlindSideView Answer on Stackoverflow
Solution 12 - Pythonid01View Answer on Stackoverflow
Solution 13 - PythonPranav PanditView Answer on Stackoverflow
Solution 14 - PythoncybervigilanteView Answer on Stackoverflow
Solution 15 - PythonilluminatoView Answer on Stackoverflow
Solution 16 - PythoniacismeView Answer on Stackoverflow
Solution 17 - PythonMouneshView Answer on Stackoverflow
Solution 18 - PythonPrimeTimeView Answer on Stackoverflow