Как вставить изображение или картинку в блокнот Jupyter, либо с локальной машины, либо с веб-ресурса?


305

Я хотел бы включить изображение в блокнот Jupyter.

Если я сделал следующее, это работает:

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

Но я хотел бы включить изображения в ячейку уценки, и следующий код выдает ошибку 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

Ответы:


306

Вы не должны использовать кавычки вокруг имени файлов изображений в уценке!

Если вы внимательно прочитаете свое сообщение об ошибке, вы увидите две %22части в ссылке. Это кавычка в кодировке html.

Вы должны изменить линию

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

в

![title](img/picture.png)

ОБНОВИТЬ

Предполагается, что у вас есть следующая файловая структура и вы запускаете jupyter notebookкоманду в каталоге, где example.ipynbхранится файл (<- содержит уценку для изображения):

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

8
Для меня это не работает при загрузке ноутбука в формате HTML. Это показывает битую ссылку на изображение. Использование IPython.display.Imageработает как положено.
Джоелостблом

7
@cheflo Приведенный выше синтаксис не встраивает изображение в HTML-файл. Если вы посмотрите исходный код html-файла, вы найдете запись типа <img src = "img / picture.png" alt = "title">. Чтобы увидеть картинку, вы должны скопировать ее в папку, imgотносящуюся к html-файлу.
Себастьян Стиглер

1
Я подозревал, что это так, спасибо за разъяснения. Я думал, что это различие между этими двумя подходами было неожиданным и, по крайней мере, для меня, определил, какой из них выбрать, поэтому я хотел привлечь к нему внимание.
Joelostblom

3
выполняя это с помощью markdown, убедитесь, что файл изображения находится в том же каталоге, в котором находится ваш блокнот. По какой-то странной (в моем случае) причине, jupyter-notebook не был убежден, что он будет действовать по полному пути ... ![title](picture.png)
Арун Кумар Хаттри

2
@ArunKumarKhattri - была та же проблема, работал только путь к ноутбуку - в моем случае:! [
Title

211

Есть несколько способов разместить изображение в блокнотах 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 в комментариях)
    (На макросах, пока вы находитесь в ячейке уценки, вы должны делать это так: ![title](../image 1.png)и не беспокоиться о пустом месте).

для веб-изображения:

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

как показано @cristianmtr Обратите внимание, чтобы не использовать ни эти кавычки, ""ни те, которые находятся ''вокруг URL.

или местный:

![title](img/picture.png)

продемонстрировано @Sebastian


Это правда, что возможность изменить размер изображения интересна. Но для будущего рендеринга уценка лучше для меня.
Ger

3
Вы можете поставить локальный с абсолютным путем, через уценку? Я пытался, но это не сработало. Редактировать: Firefox (и Chrome) не разрешают доступ к локальным файлам для безопасности
Ciprian Tomoiagă

2
@SwimBikeRun вы должны выбрать правильный тип ячейки. Ваш текущий тип ячейки должен быть кодом
youkaichao

1
Недооцененный ответ. Очень тщательно
Натан

1
версия уценки не допускает пробелов в именах файлов для тех, кто сталкивается с этой проблемой
CoffeeTableEspresso

58

В качестве альтернативы вы можете использовать обычный HTML <img src>, который позволяет изменять высоту и ширину и все еще читается интерпретатором уценки:

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

3
Большой! Я предпочитаю этот ответ, так как у нас есть контроль над размером вывода! Это важно, например, при использовании инструмента pelican для публикации блокнота jupyter в виде статических html-страниц.
Свен

7
HTML не нуждается в запятых - просто поместите пробел между вашими атрибутами - и рекомендуется помещать кавычки вокруг всех значений атрибутов, например width="60".
Коллин

Святой Ш * т. Это супер круто
Tessaracter

Да, это круто :) но ... изображение теряется в PDF версиях. Жаль.
Бабу

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, либо используя %%HTMLmagic:

Если вам нужно указать высоту изображения, это не будет работать:

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

Это связано с тем, что CSS-стили в Jupyter height: autoпо умолчанию используют imgтеги, которые переопределяют атрибут высоты HTML. Вам нужно переписать heightатрибут CSS вместо этого:

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

19

Вставьте изображение прямо в блокнот Jupyter.

Примечание: у вас должна быть локальная копия изображения на вашем компьютере

Вы можете вставить изображение в сам блокнот Jupyter. Таким образом, вам не нужно хранить изображение отдельно в папке.

шаги:

  1. Преобразовать ячейку в markdown:

    • нажав M на выбранной ячейке
      ИЛИ
    • В строке меню выберите Ячейка> Тип ячейки> Уценка.
      ( Примечание. Важно преобразовать ячейку в Markdown, иначе параметр «Вставить изображение» в шаге 2 не будет активен).
  2. Теперь перейдите в строку меню и выберите «Правка» -> «Вставить изображение».

  3. Выберите изображение с вашего диска и загрузите.

  4. Нажмите Ctrl+ Enterили Shift+ Enter.

Это сделает изображение частью ноутбука, и вам не нужно загружать его в каталог или на Github. Я чувствую, что это выглядит более чистым и не склонным к нарушению URL-адреса.


Спасли меня !, Спасибо
Мохаммед

Еще одна полезная функциональность, добавленная разработчиками Jupyter. Один недостаток, который следует отметить, для случаев, когда это имеет значение: оно будет включать изображение в IPyNB Jasonкод, что сделает его намного больше и не будет удобным для редактирования кода (например, при проверке diffs).
Эльдад-

13

Вот как вы можете сделать это с помощью Markdown:

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

1
По некоторым причинам отображение изображений через уценку не работает для меня ... Вы уверены, что синтаксис правильный cristianmtr?
Маска Реблохона

1
Да, просто проверил это снова. Вы уверены, что установите ячейку на Markdown? Кроме того, какую версию IPython / Jupyter вы используете? Мой говорит: «Версия сервера ноутбука 4.0.4 и работает на: Python 2.7.8 (по умолчанию, 30 июня 2014, 16:08:48) [MSC v.1500 64 бит (AMD64)]» ​​Вот скриншот с результатами: i.imgur.com/4ISJFDE.png
cristianmtr

будьте осторожны с путями, то, что работает локально, не работает онлайн, .e. imgs \ pic.png работает локально, в то время как онлайн: 1: case Sensitve (Pic.png) 2: обратный слеш и косая черта не совпадают ...: / -
Интеллектуальная инфраструктура

Прекрасно работает в Python 3.8. Спасибо
jamescampbell

В имени файла для уценки не должно быть пробелов, если кто-то еще сталкивался с этой проблемой
CoffeeTableEspresso

12
  1. Установите режим ячейки на Markdown
  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)
CgodLEY

10

Если вы хотите использовать API Jupyter Notebook (а не 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. Но он показывает вам API для отображения изображений. Вы также можете изменить размер изображения с помощью widthи heightпараметрами.


Похоже, вариант valueбыл переименован dataв. Для локально сохраненного изображения код Image(data=open(filename_png, 'rb').read())работал для меня.
19

7

Вот решение для Jupyter и Python3 :

Я бросил свои изображения в папку с именем ImageTest. Мой каталог:

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

Чтобы показать изображение, я использовал это выражение:

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

Также следите за /и\


Это работает только для меня. Спасибо! «ShowMyImage» работает как шарм!
Пранцелл

4

Это работает для меня в ячейке уценки. Почему-то мне не нужно специально упоминать, если это изображение или простой файл.

![](files/picture.png)

Чем он отличается от ответа Себастьяна Стиглера?
iNet

1
Просто хотел подчеркнуть, что это работает для меня без включения названия в квадратную скобку. Ничего особенного
Пранав Пандит

2

Я обнаружил, что путь к вашему изображению должен быть относительно того места, откуда изначально была загружена записная книжка. если вы перейдете в другой каталог, такой как Pictures, ваш путь 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, существует способ встроить изображение в сам блокнот jupyter, используя только markdown и base64!

Чтобы просмотреть изображение в браузере, перейдите по ссылке data:image/png;base64,**image data here**для изображения PNG в кодировке base64 или data:image/jpg;base64,**image data here**для изображения JPG в кодировке base64. Пример ссылки можно найти в конце этого ответа.

Для того, чтобы встроить это в страницу уценки, просто использовать подобную конструкцию в файле ответов, но с 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==)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.