วิธีการฝังภาพหรือภาพในสมุดบันทึก 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

คำตอบ:


306

คุณต้องไม่ใช้เครื่องหมายคำพูดล้อมรอบชื่อของไฟล์รูปภาพใน markdown!

หากคุณอ่านข้อความแสดงข้อผิดพลาดอย่างรอบคอบคุณจะเห็นสอง%22ส่วนในลิงก์ นั่นคือเครื่องหมายคำพูดที่เข้ารหัส html

คุณต้องเปลี่ยนสาย

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

ถึง

![title](img/picture.png)

UPDATE

มีการสันนิษฐานว่าคุณมีโครงสร้างไฟล์ต่อไปนี้และคุณรัน jupyter notebookคำสั่งในไดเรกทอรีที่จัดเก็บไฟล์example.ipynb(<- มี markdown สำหรับภาพ):

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

8
สำหรับฉันมันใช้งานไม่ได้เมื่อดาวน์โหลดโน้ตบุ๊กเป็น html มันแสดงลิงค์ภาพที่เสียหาย ใช้IPython.display.Imageงานตามที่คาดไว้
joelostblom

7
@cheflo ไวยากรณ์ข้างต้นไม่ได้ฝังรูปภาพในไฟล์ html หากคุณดูในซอร์สโค้ดของไฟล์ html คุณจะพบรายการเช่น <img src = "img / picture.png" alt = "title"> หากต้องการดูรูปภาพคุณต้องคัดลอกในโฟลเดอร์imgrelativ ไปยังไฟล์ html
Sebastian Stigler

1
ฉันสงสัยว่าเป็นกรณีนี้ขอขอบคุณสำหรับการชี้แจง ฉันคิดว่าความแตกต่างระหว่างสองแนวทางนี้เป็นสิ่งที่คาดไม่ถึงและอย่างน้อยก็สำหรับฉันกำหนดว่าจะเลือกแบบใดดังนั้นฉันจึงต้องการให้ความสนใจ
joelostblom

3
ในขณะที่ทำมันผ่าน markdown ให้แน่ใจว่าไฟล์รูปภาพอยู่ในไดเรกทอรีเดียวกับที่สมุดบันทึกของคุณอยู่ด้วยเหตุผลแปลก ๆ บางอย่าง (ในกรณีของฉัน) jupyter-notebook ไม่เชื่อที่จะทำแบบเต็มเส้นทาง ... ![title](picture.png)
Arun Kumar Khattri

2
@ArunKumarKhattri - มีปัญหาเดียวกันเพียงเส้นทาง reletive ไปยังโน้ตบุ๊กที่ทำงาน - ในกรณีของฉัน:! [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))

หรือผ่านทาง markdown:

  • ตรวจสอบให้แน่ใจว่าเซลล์เป็นเซลล์ markdown และไม่ใช่เซลล์รหัสขอบคุณ @ 游凯超ในความคิดเห็น)
  • โปรดทราบว่าในบางระบบ markdown จะไม่อนุญาตให้มี white space ในชื่อไฟล์ ขอบคุณ @CoffeeTableEspresso และ @zebralamy ในความคิดเห็น)
    (บน macos ตราบใดที่คุณอยู่ในเซลล์ markdown คุณจะทำสิ่งนี้: ![title](../image 1.png)และไม่ต้องกังวลเกี่ยวกับพื้นที่สีขาว)

สำหรับภาพเว็บ:

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

ตามที่แสดงโดย @cristianmtr ให้ความสนใจไม่ใช้คำพูดเหล่านี้""หรือที่''อยู่รอบ ๆ url

หรือท้องถิ่น:

![title](img/picture.png)

แสดงโดย @Sebastian


มันเป็นความจริงที่ความเป็นไปได้ในการปรับขนาดภาพนั้นน่าสนใจ แต่สำหรับการเรนเดอร์ในอนาคต markdown จะดีกว่าสำหรับฉัน
Ger

3
คุณสามารถใส่คนในพื้นที่ด้วยเส้นทางที่แน่นอนผ่าน markdown ได้ไหม? ฉันพยายาม แต่ดูเหมือนจะไม่ทำงาน แก้ไข: Firefox (และ Chrome) ไม่อนุญาตให้เข้าถึงไฟล์ในเครื่องเพื่อความปลอดภัย
Ciprian Tomoiagă

2
@SwimBikeRun คุณควรเลือกประเภทของเซลล์ที่เหมาะสม ประเภทเซลล์ปัจจุบันของคุณต้องเป็นรหัส
youkaichao

1
คำตอบที่ไม่ถูกต้อง ถี่ถ้วนมาก
นาธาน

1
รุ่น markdown ไม่อนุญาตให้มีช่องว่างในชื่อไฟล์สำหรับทุกคนที่พบปัญหา
CoffeeTableEspresso

57

อีกวิธีหนึ่งคุณสามารถใช้ HTML ธรรมดา<img src>ซึ่งช่วยให้คุณเปลี่ยนความสูงและความกว้างและยังคงถูกอ่านโดยล่ามมาร์กอัป:

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

3
ที่ดี! ฉันชอบคำตอบนี้มากเพราะเราสามารถควบคุมขนาดเอาต์พุตได้! นั่นเป็นสิ่งสำคัญเช่นเมื่อใช้เครื่องมือ Pelican เพื่อเผยแพร่สมุดบันทึก jupyter เป็นหน้า html คงที่
Svend

7
HTML ไม่จำเป็นต้องจุลภาค - เพียงแค่ใส่ช่องว่างระหว่างคุณลักษณะของคุณ - width="60"และก็แนะนำให้ใส่คำพูดรอบทุกค่าแอตทริบิวต์เช่น
colllin

ศักดิ์สิทธิ์ sh * t นี่คือสุดยอดมาก
Tessaracter

ใช่มันยอดเยี่ยม :) แต่ ... ภาพหายไปในเวอร์ชัน PDF เลวร้ายเกินไป.
Babou

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 เซลล์ จากdocs (IPython แต่เหมือนกับ Jupyter)

%% HTML

Render the cell as a block of HTML

19

นอกเหนือจากคำตอบอื่น ๆ โดยใช้ HTML (ทั้งใน Markdown หรือใช้%%HTMLเวทย์มนตร์:

หากคุณต้องการระบุความสูงของรูปภาพสิ่งนี้จะไม่ทำงาน:

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

นั่นเป็นเพราะ CSS ใส่สไตล์ใน Jupyter ใช้height: autoต่อค่าเริ่มต้นสำหรับimgแท็กซึ่งแทนที่คุณลักษณะความสูง HTML คุณต้องเขียนทับ CSSheightแอตทริบิวต์แทน:

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

18

แทรกรูปภาพโดยตรงในสมุดบันทึก Jupyter

หมายเหตุ: คุณควรมีสำเนาของรูปภาพในคอมพิวเตอร์ของคุณ

คุณสามารถแทรกภาพในสมุดบันทึก Jupyter ได้ วิธีนี้คุณไม่จำเป็นต้องแยกรูปภาพไว้ในโฟลเดอร์

ขั้นตอน:

  1. แปลงเซลล์เป็นmarkdownโดย:

    • กด M บนเซลล์ที่เลือก
      หรือ
    • จากแถบเมนูเซลล์> ประเภทเซลล์> Markdown
      ( หมายเหตุ:สิ่งสำคัญคือการแปลงเซลล์เป็น Markdown มิฉะนั้นตัวเลือก "แทรกรูปภาพ" ในขั้นตอนที่ 2 จะไม่ทำงาน)
  2. ตอนนี้ไปที่แถบเมนูและเลือกแก้ไข -> แทรกภาพ

  3. เลือกภาพจากดิสก์ของคุณและอัปโหลด

  4. กดCtrl+ Enterหรือ+ShiftEnter

สิ่งนี้จะทำให้รูปภาพเป็นส่วนหนึ่งของสมุดบันทึกและคุณไม่จำเป็นต้องอัปโหลดในไดเรกทอรีหรือ Github ฉันรู้สึกว่าสิ่งนี้ดูสะอาดและไม่เกิดปัญหา URL เสียหาย


ช่วยฉันด้วย !, ขอบคุณ
โมฮัมหมัดเฮย์ดารี

อีกฟังก์ชั่นที่เป็นประโยชน์อีกอย่างที่เพิ่มโดยผู้Jupyterพัฒนา ข้อเสียอย่างหนึ่งที่ควรทราบสำหรับกรณีนี้คือ: มันจะรวมถึงภาพในIPyNB Jasonรหัสจึงทำให้มันมีขนาดใหญ่กว่าและไม่เป็นมิตรกับการแก้ไขรหัส (เช่นเมื่อตรวจสอบdiff)
eldad-a

13

นี่คือวิธีที่คุณสามารถทำได้ด้วย Markdown:

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

1
ด้วยเหตุผลบางอย่างการแสดงภาพผ่านมาร์คดาวน์ไม่ได้ผลสำหรับฉัน ... คุณแน่ใจหรือไม่ว่าไวยากรณ์นั้นถูกต้อง cristianmtr?
Reblochon Masque

1
ใช่เพิ่งทดสอบอีกครั้ง คุณแน่ใจหรือว่าคุณตั้งเซลล์เป็น Markdown นอกจากนี้คุณใช้ IPython / Jupyter เวอร์ชันใดอยู่ Mine กล่าวว่า: "รุ่นของเซิร์ฟเวอร์โน้ตบุ๊กคือ 4.0.4 และทำงานบน: Python 2.7.8 (ค่าเริ่มต้น, 30 มิ.ย. 2014, 16:08:48) [MSC v.1500 64 บิต (AMD64)]" นี่คือ สกรีนช็อต
cristianmtr

ระวังกับเส้นทางสิ่งที่ทำงานในพื้นที่ไม่ทำงานออนไลน์ imgs \ pic.png ทำงานในพื้นที่ขณะที่ออนไลน์คือ 1: case sensitve (Pic.png) 2: แบ็กสแลชและเครื่องหมายทับจะไม่เหมือนกัน ... : / -
โครงสร้างพื้นฐานอัจฉริยะ

ใช้งานได้ดีใน Python 3.8 ขอบคุณ
jamescampbell

ไม่อนุญาตให้มีช่องว่างในชื่อไฟล์สำหรับ markdown ในกรณีที่บุคคลอื่นประสบปัญหานี้
CoffeeTableEspresso

12
  1. ตั้งค่าโหมดเซลล์เป็น Markdown
  2. ลากและวางภาพของคุณลงในเซลล์ คำสั่งต่อไปนี้จะถูกสร้างขึ้น:

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

  1. ดำเนินการ / เรียกใช้เซลล์และภาพจะปรากฏขึ้น

ภาพนั้นฝังอยู่ใน ipynb Notebook และคุณไม่จำเป็นต้องยุ่งกับไฟล์แยกต่างหาก น่าเสียดายที่นี่ยังไม่สามารถใช้งานกับ Jupyter-Lab (v 1.1.4) ได้

แก้ไข: ทำงานใน JupyterLab เวอร์ชัน 1.2.6


1
ใช่แบ็ตเมื่อฉันต้องการดาวน์โหลดเป็น HTML embebed ฉันได้รับข้อผิดพลาด "nbconvert ล้มเหลว: ไม่มีไฟล์แนบ: imagen.png" ทำไม?
efueyo

การวางภาพจากคลิปบอร์ดยังใช้งานได้สำหรับฉัน (หลังจากตั้งค่าโหมดเซลล์เป็นMarkdown)
CgodLEY

10

หากคุณต้องการที่จะใช้โน๊ตบุ๊ค Jupyter 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 แต่มันจะแสดงให้คุณเห็น Image Notebook Notebook API นอกจากนี้คุณยังสามารถปรับขนาดภาพด้วยwidthและheightพารามิเตอร์


ดูเหมือนว่าจะvalueมีการเปลี่ยนชื่อตัวเลือกเป็นdataในระหว่างนี้ สำหรับภาพที่เก็บไว้ในท้องถิ่นรหัสImage(data=open(filename_png, 'rb').read())ทำงานสำหรับฉัน
jottbe

7

นี่คือโซลูชันสำหรับJupyterและPython3 :

ฉัน droped ImageTestภาพของฉันในโฟลเดอร์ชื่อ ไดเรกทอรีของฉันคือ:

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

เพื่อแสดงภาพฉันใช้การแสดงออกนี้:

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

ยังระวัง/และ\


มันได้ผลสำหรับฉันเท่านั้น ขอบคุณ! "ShowMyImage" ทำงานเหมือนจับใจ!
Pranzell

4

สิ่งนี้ใช้ได้สำหรับฉันในเซลล์ markdown อย่างใดฉันไม่จำเป็นต้องพูดถึงเฉพาะถ้ามันเป็นภาพหรือไฟล์ที่เรียบง่าย

![](files/picture.png)

มันแตกต่างจากคำตอบของเซบาสเตียนสติกเลอร์อย่างไร?
iNet

1
แค่อยากจะเน้นว่ามันใช้ได้กับฉันโดยไม่รวมชื่อไว้ในวงเล็บเหลี่ยม ไม่มีอะไรแตกต่าง
Pranav Pandit

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 มีวิธีการฝังภาพในสมุดบันทึก jupyter ตัวเองใช้เพียง markdown และ base64!

หากต้องการดูภาพในเบราว์เซอร์คุณสามารถไปที่ลิงค์data:image/png;base64,**image data here**สำหรับภาพ PNG ที่เข้ารหัส 64 หรือdata:image/jpg;base64,**image data here**สำหรับภาพ JPG ที่เข้ารหัส 64 ลิงค์ตัวอย่างสามารถพบได้ในตอนท้ายของคำตอบนี้

หากต้องการฝังสิ่งนี้ลงในหน้า markdown เพียงใช้โครงสร้างที่คล้ายกันเป็นคำตอบของไฟล์ แต่ใช้ลิงค์ base64 แทน: ![**description**](data:image/**type**;base64,**base64 data**)แทน: ตอนนี้ภาพของคุณจะถูกฝัง 100% ลงในไฟล์ Jupyter Notebook ของคุณ!

ลิงค์ตัวอย่าง: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAD9JREFUGJW1jzEOADAIAqHx/1+mE4ltNXEpI3eJQknCIGsiHSLJB+aO/06PxOo/x2wBgKR2jCeEy0rOO6MDdzYQJRcVkl1NggAAAABJRU5ErkJggg==

ตัวอย่าง markdown: ![smile](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAD9JREFUGJW1jzEOADAIAqHx/1+mE4ltNXEpI3eJQknCIGsiHSLJB+aO/06PxOo/x2wBgKR2jCeEy0rOO6MDdzYQJRcVkl1NggAAAABJRU5ErkJggg==)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.