Ipython: элСгантный способ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» gif Π² записной ΠΊΠ½ΠΈΠΆΠΊΠ΅?

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 7 нояб. 2016  Β·  11ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: ipython/ipython

ΠŸΡ€ΠΈΠ²Π΅Ρ‚,

Π•ΡΡ‚ΡŒ Π»ΠΈ способ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ GIF ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ способом? Π£ мСня Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΏΡƒΡ‚ΠΈ, Π½ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я Ρ…ΠΎΡ‡Ρƒ

  • ИспользованиС HTML
def display_gif(fn):
    from IPython import display
    return display.HTML('<img src="{}">'.format(fn))

Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с кСшСм Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. Если я ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°ΡŽ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°, Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ.

  • ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠΉΡ‚Π΅ .gif Π² .png Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ display.Image(fn) .

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ.

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, Π΅ΡΡ‚ΡŒ нСсколько способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это:

HTML

from IPython.display import HTML
HTML('<img src="../giphy.gif">')

Image(filename=*) ΠΈΠ»ΠΈ Image(url=*) , Π΄ΠΎΠ±Π°Π²ΠΈΠ² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ png ΠΊ Ρ„Π°ΠΉΠ»Ρƒ GIF

from IPython.display import Image
Image(filename="../giphy.gif.png")

Image(data=*)

with open('../giphy.gif','rb') as f:
    display(Image(data=f.read(), format='png'))

Π’ ΠΈΠ΄Π΅Π°Π»Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Image(filename=*) ΠΈΠ»ΠΈ Image(url=*) Π±Π΅Π· нСобходимости ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ format="gif" . Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ GIF Π΅Ρ‰Π΅ Π½Π΅ поддСрТиваСтся? Если Π½Π΅Ρ‚, я Π³ΠΎΠ²ΠΎΡ€ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌ πŸ‘

ВсС 11 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠšΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π½Π°Π΅Ρ‚, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π»ΠΈ URL-адрСса Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… с Π³ΠΈΡ„ΠΊΠ°ΠΌΠΈ? ΠœΠΎΠΆΠ΅Ρ‚, Π½Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² IPython.display.Image._ACCEPTABLE_EMBEDDINGS .

URI Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с gif ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ MIME, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€:

'<img src="data:image/gif;base64,{0}"/>'.format(base64.b64encode(gif))

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, Π΅ΡΡ‚ΡŒ нСсколько способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это:

HTML

from IPython.display import HTML
HTML('<img src="../giphy.gif">')

Image(filename=*) ΠΈΠ»ΠΈ Image(url=*) , Π΄ΠΎΠ±Π°Π²ΠΈΠ² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ png ΠΊ Ρ„Π°ΠΉΠ»Ρƒ GIF

from IPython.display import Image
Image(filename="../giphy.gif.png")

Image(data=*)

with open('../giphy.gif','rb') as f:
    display(Image(data=f.read(), format='png'))

Π’ ΠΈΠ΄Π΅Π°Π»Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Image(filename=*) ΠΈΠ»ΠΈ Image(url=*) Π±Π΅Π· нСобходимости ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ format="gif" . Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ GIF Π΅Ρ‰Π΅ Π½Π΅ поддСрТиваСтся? Если Π½Π΅Ρ‚, я Π³ΠΎΠ²ΠΎΡ€ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌ πŸ‘

ΠΊΠ°ΠΊ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ HTML , это довольно просто:

from IPython.display import display, HTML

HTML('''<div style="display: flex; justify-content: row;">
    <img src="../giphy.gif">
    <img src="../giphy.gif">
    <img src="../giphy.gif">
</div>''')

Π’ записных ΠΊΠ½ΠΈΠΆΠΊΠ°Ρ… Colab Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

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

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, я ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² IPython, Jupyter ΠΈ CoLab:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
from IPython import display

Π’Π°ΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ячСйку _ΠΏΠ΅Ρ€Π΅Π΄_ запуском ячСйки Π½ΠΈΠΆΠ΅.

from pathlib import Path
gifPath = Path("/path/to/my.gif")
# Display GIF in Jupyter, CoLab, IPython
with open(gifPath,'rb') as f:
    display.Image(data=f.read(), format='png')

И для ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹, Π²ΠΎΡ‚ ΠΊΠ°ΠΊ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ Π³ΠΈΡ„ΠΊΠΈ Π½Π° Python:

# Generate GIF
import imageio
from pathlib import Path

picsPath = Path("/path/to/pics/folder/")
images = []
for f in picsPath.glob("*.png"):
    images.append(imageio.imread(f))
imageio.mimsave(picsPath / 'movie.gif', images)

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ GIF Π² Jupyter Notebook, сдСлайтС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:
ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ссылку: https://media.giphy.com/media/3oD3YveOJWdwIAfZ5e/giphy.gif
Π—Π°Ρ‚Π΅ΠΌ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‚Ρ€ΠΈ Π±ΡƒΠΊΠ²Ρ‹ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ подряд ΠΈ помСститС ссылку http Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки: Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ скобки Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках.
![](https://media.giphy.com/media/3oD3YveOJWdwIAfZ5e/giphy.gif)

Π›ΡŽΠ±ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ изобраТСния, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ png, jpg, jpeg ΠΈΠ»ΠΈ gif ΠΈ Ρ‚. Π”., ΠšΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π² Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Π΅ python jupyter, просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ matplotlib.
"ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ matplotlib.pyplot ΠΊΠ°ΠΊ plt"
"ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» matplotlib.image ΠΊΠ°ΠΊ mpimg"
img = mpimg.imread ("/ home / gaurav / soft computing assignment / soft computing / river.gif")
plt.imshow (img)

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, я ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² IPython, Jupyter ΠΈ CoLab:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
from IPython import display

Π’Π°ΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ячСйку _ΠΏΠ΅Ρ€Π΅Π΄_ запуском ячСйки Π½ΠΈΠΆΠ΅.

from pathlib import Path
gifPath = Path("/path/to/my.gif")
# Display GIF in Jupyter, CoLab, IPython
with open(gifPath,'rb') as f:
    display.Image(data=f.read(), format='png')

И для ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹, Π²ΠΎΡ‚ ΠΊΠ°ΠΊ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ Π³ΠΈΡ„ΠΊΠΈ Π½Π° Python:

# Generate GIF
import imageio
from pathlib import Path

picsPath = Path("/path/to/pics/folder/")
images = []
for f in picsPath.glob("*.png"):
    images.append(imageio.imread(f))
imageio.mimsave(picsPath / 'movie.gif', images)

Бпасибо. Π­Ρ‚ΠΎ сработало для мСня. Π•ΡΡ‚ΡŒ Π»ΠΈ способ Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Colab?

Π’Π°ΠΊΠΆΠ΅ (для всСх) Π΅ΡΡ‚ΡŒ Π»ΠΈ способ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ gif Π² ячСйкС Markdown Π² Colab, ΠΊΠΎΠ³Π΄Π° gif хранится Π½Π° Google ДискС?

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π²ΠΎΡ‚ моя заявка, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΡ€Ρ‹Ρ‚Π°: ΠΊΠΎΠ³Π΄Π° я ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π²Ρ‹ΡˆΠ΅, экспортированный Ρ„Π°ΠΉΠ» HTML Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ GIF, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ встроСнного base64, поэтому Ρƒ мСня Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (Π² Python 3.6+)

def show_gif(fname):
    import base64
    from IPython import display
    with open(fname, 'rb') as fd:
        b64 = base64.b64encode(fd.read()).decode('ascii')
    return display.HTML(f'<img src="data:image/gif;base64,{b64}" />')

show_gif('pikachu.gif')
Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ