图像#
显示一张图片。这个元素基于 Quasar 的 QImg 组件。
source
:图像的来源,可以是 URL、本地文件路径、base64
字符串或 PIL
图像。
from nicegui import ui
ui.image('https://picsum.photos/id/377/640/360')
# ui.run()
<nicegui.elements.image.Image at 0x7ffa0475beb0>
本地文件#
您也可以通过传递图像文件的路径来使用本地图像。
from nicegui import ui
ui.image('website/static/logo.png').classes('w-16')
# ui.run()
<nicegui.elements.image.Image at 0x7ff9c1159240>
Base64字符串#
您也可以使用 Base64 字符串作为图像源。
from nicegui import ui
base64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='
ui.image(base64).classes('w-2 h-2 m-auto')
# ui.run()
<nicegui.elements.image.Image at 0x7ffa0459f340>
PIL
图像#
您也可以使用 PIL
图像作为图像源。
import numpy as np
from nicegui import ui
from PIL import Image
image = Image.fromarray(np.random.randint(0, 255, (100, 100), dtype=np.uint8))
ui.image(image).classes('w-32')
# ui.run()
<nicegui.elements.image.Image at 0x7ff9c11583a0>
Lottie文件#
您还可以使用带有动画的Lottie文件。
from nicegui import ui
ui.add_body_html('<script src="https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js"></script>')
src = 'https://assets1.lottiefiles.com/datafiles/HN7OcWNnoqje6iXIiZdWzKxvLIbfeCGTmvXmEm1h/data.json'
ui.html(f'<lottie-player src="{src}" loop autoplay />').classes('w-full')
# ui.run()
<nicegui.elements.html.Html at 0x7ff9c1158a30>
图像链接#
通过将图像包裹在ui.link中,图像可以链接到另一个页面。
from nicegui import ui
with ui.link(target='https://github.com/zauberzeug/nicegui'):
ui.image('https://picsum.photos/id/41/640/360').classes('w-64')
# ui.run()
强制重新加载#
您可以通过调用 force_reload
方法来强制重新加载图像。它将在图像URL后附加一个时间戳,这将使浏览器重新加载图像。
from nicegui import ui
img = ui.image('https://picsum.photos/640/360').classes('w-64')
ui.button('Force reload', on_click=img.force_reload)
# ui.run()
<nicegui.elements.button.Button at 0x7ffa0459ee30>
字幕和叠加层#
通过在 ui.image
内部嵌套元素,您可以创建增强效果。
使用Quasar类进行字幕的定位和样式设计。要叠加SVG,请使viewBox
的大小与图像的实际大小完全匹配,并提供100%
的宽度/高度以匹配实际渲染的大小。
from nicegui import ui
with ui.image('https://picsum.photos/id/29/640/360'):
ui.label('Nice!').classes('absolute-bottom text-subtitle2 text-center')
with ui.image('https://cdn.stocksnap.io/img-thumbs/960w/airplane-sky_DYPWDEEILG.jpg'):
ui.html('''
<svg viewBox="0 0 960 638" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg">
<circle cx="445" cy="300" r="100" fill="none" stroke="red" stroke-width="20" />
</svg>
''').classes('bg-transparent')
# ui.run()