Jak osadzić obraz lub obraz w notatniku jupyter, z lokalnego komputera lub z zasobu sieciowego?

304

Chciałbym dołączyć obraz do notatnika jupyter.

Jeśli zrobiłbym następujące, to działa:

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

Chciałbym jednak uwzględnić obrazy w komórce przeceny, a następujący kod podaje błąd 404:

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

Też próbowałem

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

Ale nadal pojawia się ten sam błąd:

404 GET /notebooks/%22/home/user/folder/img/picture.png%22 (127.0.0.1) 2.74ms referer=http://localhost:8888/notebooks/notebook.ipynb
Ger
źródło

Odpowiedzi:

306

Nie możesz używać cudzysłowów wokół nazw plików graficznych w przecenianiu!

Jeśli dokładnie przeczytasz komunikat o błędzie, zobaczysz dwie %22części w linku. To jest znak cudzysłowu zakodowany w formacie HTML.

Musisz zmienić linię

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

do

![title](img/picture.png)

AKTUALIZACJA

Zakłada się, że masz następującą strukturę plików i że uruchamiasz jupyter notebookkomendę w katalogu, w którym plik example.ipynb(<- zawiera znacznik dla obrazu):

/
+-- example.ipynb
+-- img
    +-- picture.png
Sebastian Stigler
źródło
8
Dla mnie nie działa to podczas pobierania notebooka jako HTML. Pokazuje uszkodzony link do obrazu. Używanie IPython.display.Imagedziała zgodnie z oczekiwaniami.
joelostblom
7
@cheflo Powyższa składnia nie osadza obrazu w pliku HTML. Jeśli zajrzysz do kodu źródłowego pliku html, znajdziesz wpis taki jak <img src = "img / picture.png" alt = "title">. Aby zobaczyć zdjęcie, musisz skopiować je do folderu imgrelatywnego do pliku HTML.
Sebastian Stigler
1
Podejrzewałem, że tak było, dziękuję za wyjaśnienie. Myślałem, że ta różnica między tymi dwoma podejściami była nieoczekiwana i przynajmniej dla mnie zdecydowałem, który wybrać, więc chciałem zwrócić na to uwagę.
joelostblom
3
robiąc to za pomocą Markdown, upewnij się, że plik obrazu znajduje się w tym samym katalogu, w którym znajduje się twój notatnik, z jakiegoś dziwnego powodu (w moim przypadku), jupyter-notebook nie był przekonany do działania na całej ścieżce ... ![title](picture.png)
Arun Kumar Khattri
2
@ArunKumarKhattri - miał ten sam problem, działała tylko pełna ścieżka do notebooka - w moim przypadku:! [Tytuł] (../ img / picture.png)
ohad edelstain
209

Istnieje kilka sposobów na opublikowanie obrazu w notesach Jupyter:

przez HTML:

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

Zachowujesz możliwość używania znaczników HTML do zmiany rozmiaru itp.

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

Możesz także wyświetlać obrazy przechowywane lokalnie, albo ścieżką względną, albo bezwzględną.

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

jeśli obraz jest szerszy niż ustawienia wyświetlania: dzięki

Użyj, unconfined=Trueaby wyłączyć ograniczenie szerokości obrazu

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

lub poprzez obniżkę:

  • upewnij się, że komórka jest komórką przeceny, a nie komórką kodu, dzięki @ 游 凯 超 w komentarzach)
  • Pamiętaj, że w niektórych systemach przecena nie dopuszcza białych znaków w nazwach plików. Dzięki @CoffeeTableEspresso i @zebralamy w komentarzach)
    (Na komputerach Mac, tak długo, jak jesteś w komórce przeceny, robisz tak: ![title](../image 1.png)i nie martw się o białe znaki).

dla obrazu internetowego:

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

jak pokazuje @cristianmtr Zwracając uwagę, aby nie używać ani tych cytatów, ""ani tych ''wokół adresu URL.

lub lokalny:

![title](img/picture.png)

zademonstrowany przez @Sebastian

Reblochon Masque
źródło
Prawdą jest, że możliwość zmiany rozmiaru obrazu jest interesująca. Ale dla renderowania w przyszłości dla mnie lepsza jest wyprzedaż.
Ger
3
czy umieścisz lokalny z absolutną ścieżką poprzez markdown? próbowałem, ale to nie działa. Edycja: Firefox (i Chrome) nie zezwalają na dostęp do lokalnych plików ze względów bezpieczeństwa
Ciprian Tomoiagă,
2
@ SwimBikeRun powinieneś wybrać odpowiedni typ komórki. bieżącym typem komórki musi być kod
youkaichao
1
Niedoceniana odpowiedź. Bardzo dokładny
Nathan
1
wersja przeceny nie dopuszcza spacji w nazwach plików, dla każdego, kto
napotyka
57

Alternatywnie możesz użyć zwykłego kodu HTML <img src>, który pozwala na zmianę wysokości i szerokości i jest nadal odczytywany przez interpretera znaków:

<img src="subdirectory/MyImage.png" width=60 height=60 />
Alistair
źródło
3
Świetny! Wolę tę odpowiedź, ponieważ mamy kontrolę nad wielkością wyjściową! Jest to ważne na przykład podczas używania narzędzia pelikan do publikowania notatnika jupyter jako statycznych stron HTML.
Svend,
7
HTML nie potrzebuje przecinków - wystarczy umieścić spację między atrybutami - i zaleca się umieszczanie cudzysłowów wokół wszystkich wartości atrybutów, np width="60".
Colllin
Cholera jasna To jest super niesamowite
Tessaracter
Tak, jest niesamowity :), ale ... obraz został utracony w wersjach PDF. Szkoda
babou
21

Wiem, że nie jest to w pełni istotne, ale ponieważ ta odpowiedź jest często umieszczana na pierwszym miejscu, gdy szukasz „ sposobu wyświetlania obrazów w Jupyter ”, również ją rozważ.

Możesz użyć matplotlib do wyświetlenia obrazu w następujący sposób.

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
image = mpimg.imread("your_image.png")
plt.imshow(image)
plt.show()
władca kodów
źródło
19

Dziwię się, że nikt tutaj nie wspomniał o magicznej opcji komórki HTML. z dokumentów (IPython, ale to samo dla Jupyter)

%% html

Render the cell as a block of HTML
Malik A. Rumi
źródło
19

Oprócz innych odpowiedzi za pomocą HTML (w Markdown lub za pomocą %%HTMLmagii:

Jeśli musisz określić wysokość obrazu, to nie zadziała:

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

Wynika to z faktu, że styl CSS w Jupyter height: autodomyślnie używa imgtagów, co zastępuje atrybut wysokości HTML. Zamiast tego musisz zastąpić heightatrybut CSS :

<img src="image.png" style="height:50px"> <-- works
Bredzić
źródło
18

Wstaw obraz bezpośrednio do notatnika Jupyter.

Uwaga: powinieneś mieć lokalną kopię obrazu na swoim komputerze

Możesz wstawić obraz do samego notatnika Jupyter. W ten sposób nie musisz przechowywać obrazu osobno w folderze.

Kroki:

  1. Konwertuj komórkę na markdown:

    • naciskając M na wybranej komórce
      LUB
    • Z paska menu wybierz Komórka> Typ komórki> Markdown.
      ( Uwaga: ważne jest, aby przekonwertować komórkę na Markdown, w przeciwnym razie opcja „Wstaw obraz” w kroku 2 nie będzie aktywna)
  2. Teraz przejdź do paska menu i wybierz Edycja -> Wstaw obraz.

  3. Wybierz obraz z dysku i prześlij.

  4. Naciśnij Ctrl+ Enterlub Shift+ Enter.

Spowoduje to, że obraz będzie częścią notebooka i nie musisz przesyłać do katalogu lub Github. Wydaje mi się, że to wygląda bardziej czysto i nie jest podatne na problemy z uszkodzonymi adresami URL.

Gaurav Modi
źródło
Uratował mnie !, Dzięki
Mohammad Heydari
Kolejna przydatna funkcjonalność dodana przez twórców Jupyter. Należy zauważyć jedną wadę, w przypadkach, gdy ma to znaczenie: zawiera obraz w IPyNB Jasonkodzie, dzięki czemu jest znacznie większy, a nie przyjazny dla wersji (np. Podczas sprawdzania diff).
eldad-a
13

Oto, jak możesz to zrobić za pomocą Markdown:

![Image of Yaktocat](https://octodex.github.com/images/yaktocat.png)
cristianmtr
źródło
1
Z niektórych powodów wyświetlanie obrazów za pomocą markdown nie działa dla mnie ... Czy jesteś pewien, że składnia jest poprawna cristianmtr?
Reblochon Masque
1
Tak, właśnie przetestowałem to ponownie. Czy na pewno ustawiłeś komórkę na Markdown? Jakiej wersji IPython / Jupyter używasz? Mój mówi: „Wersja serwera notebooków to 4.0.4 i działa na: Python 2.7.8 (domyślnie, 30 czerwca 2014, 16:08:48) [MSC v.1500 64 bit (AMD64)]” Oto zrzut ekranu z wynikami: i.imgur.com/4ISJFDE.png
cristianmtr
uważaj na ścieżki, to, co działa lokalnie, nie działa online, .e. imgs \ pic.png działa lokalnie, podczas gdy online jest 1: rozróżnianie wielkości liter (Pic.png) 2: backslach i slash nie są takie same ...: / -
Intelligent-Infrastructure
Działa świetnie w Pythonie 3.8. Dzięki
jamescampbell
W nazwie pliku nie można wprowadzać spacji, na wypadek gdyby ktoś
napotkał
12
  1. Ustaw tryb komórki na Markdown
  2. Przeciągnij i upuść obraz do komórki. Zostanie utworzone następujące polecenie:

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

  1. Uruchom / Uruchom komórkę, a pojawi się obraz.

Obraz jest w rzeczywistości osadzony w notatniku ipynb i nie trzeba się bawić z osobnymi plikami. To niestety nie działa jeszcze z Jupyter-Lab (wersja 1.1.4).

Edycja: Działa w JupyterLab wersja 1.2.6

Piotr
źródło
1
Tak, nietoperz, kiedy chcę pobierać jako HTML, pojawia się błąd „nbconvert failed: brakujący załącznik: imagen.png”. Czemu?
efueyo
Wklejenie obrazu ze schowka również działa dla mnie (po ustawieniu trybu komórki na Markdown)
CgodLEY
10

Jeśli chcesz użyć interfejsu API Jupyter Notebook (a nie IPython), znajdę podprojekt ipywidgets Jupyter. Masz Imagewidżet. Docstring określa, że ​​masz valueparametr, który jest bajtem . Możesz więc zrobić:

import requests
from ipywidgets import Image

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

Zgadzam się, łatwiej jest używać stylu Markdown. Ale pokazuje ekran API do wyświetlania obrazów. Możesz także zmienić rozmiar obrazu za pomocą parametrów widthi height.

dag
źródło
Wygląda valuena to, że dataw międzyczasie zmieniono nazwę opcji . Dla lokalnie przechowywanego obrazu kod Image(data=open(filename_png, 'rb').read())działał dla mnie.
jottbe
7

Oto rozwiązanie dla Jupyter i Python3 :

Upuściłem swoje zdjęcia w folderze o nazwie ImageTest. Mój katalog to:

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

Aby wyświetlić obraz, użyłem tego wyrażenia:

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

Uważaj również na /i\

Ślepa strona
źródło
To działa tylko dla mnie. Dzięki! „ShowMyImage” działa jak urok!
Pranzell,
4

To działa dla mnie w komórce przeceny. Jakoś nie muszę specjalnie wymieniać, czy jest to obraz, czy zwykły plik.

![](files/picture.png)
Pranav Pandit
źródło
Czym różni się od odpowiedzi Sebastiana Stiglera?
iNet
1
Chciałem tylko podkreślić, że to działało dla mnie bez uwzględnienia tytułu w nawiasie kwadratowym. Nic innego.
Pranav Pandit
2

Jedną z rzeczy, które znalazłem, jest to, że ścieżka obrazu musi być względna w stosunku do miejsca, z którego notebook został pierwotnie załadowany. jeśli przechodzisz do innego katalogu, takiego jak Obrazy, twoja ścieżka Markdown jest nadal względem oryginalnego katalogu ładowania.

cybervigilante
źródło
0

Zgodziłem się, miałem te same problemy i to działało, a co nie:

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"/>*
Godziny największej oglądalności
źródło
0

Podczas gdy wiele z powyższych odpowiedzi umożliwia osadzenie obrazu przy użyciu pliku lub kodu Python, istnieje sposób na osadzenie obrazu w samym notatniku jupyter przy użyciu tylko markdown i base64!

Aby wyświetlić obraz w przeglądarce, możesz odwiedzić łącze data:image/png;base64,**image data here**do obrazu PNG zakodowanego data:image/jpg;base64,**image data here**w standardzie base64 lub w formacie JPG zakodowanego w standardzie base64. Przykładowy link można znaleźć na końcu tej odpowiedzi.

Aby umieścić to na stronie wyprzedaży, wystarczy użyć podobną konstrukcję jak odpowiedziach plików, ale z base64 odwołują zamiast: ![**description**](data:image/**type**;base64,**base64 data**). Teraz Twój obraz jest w 100% osadzony w pliku Notatnika Jupyter!

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

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

id01
źródło