使用 Flet 刷新动态变化的图片

DDD
发布: 2025-09-14 23:24:01
原创
751人浏览过

使用 flet 刷新动态变化的图片

在 Flet 应用中动态更新图片,特别是当图片文件名不变但内容变化时,直接使用 page.update() 方法可能会失效。这是因为 Flet 可能会缓存图片,导致即使文件内容改变,显示的仍然是旧的图片。解决这个问题需要绕过缓存,强制 Flet 重新加载图片。

以下是一种实现动态刷新图片的方法:

  1. 读取图片文件: 使用 Pillow (PIL) 库读取图片文件。
  2. 转换为 NumPy 数组: 将图片转换为 NumPy 数组。
  3. 转换回图片对象: 将 NumPy 数组转换回 Pillow 的图片对象。
  4. 使用 BytesIO 创建内存缓冲区: 创建一个内存缓冲区,用于存储图片数据。
  5. 将图片保存到缓冲区: 将图片以 JPEG 格式保存到内存缓冲区。
  6. 编码为 Base64 字符串: 将内存缓冲区中的图片数据编码为 Base64 字符串。
  7. 更新 ft.Image 控件: 将 Base64 字符串赋值给 ft.Image 控件的 src_base64 属性。
  8. 调用 image1.update() 方法:调用image1.update()刷新图片控件。
import numpy as np
import base64
import flet as ft
from flet import Image
from io import BytesIO
from PIL import Image as image

image_path = r"Python\plate_0.jpg" # 初始图片路径

def main(page=ft.Page):
    page.window_width = 375
    page.window_height = 300

    # 初始图片加载和编码
    pil_photo = image.open(image_path)
    arr = np.asarray(pil_photo)
    pil_img = image.fromarray(arr)
    buff = BytesIO()
    pil_img.save(buff, format="JPEG")
    image_string = base64.b64encode(buff.getvalue()).decode('utf-8')
    image1 = Image(src_base64=image_string)

    def update_image(e):
        """更新图片的函数"""
        nonlocal image1  # 声明 image1 为非局部变量

        # 重新读取图片
        pil_photo = image.open(image_path)
        arr = np.asarray(pil_photo)
        pil_img = image.fromarray(arr)
        buff = BytesIO()
        pil_img.save(buff, format="JPEG")
        newstring = base64.b64encode(buff.getvalue()).decode("utf-8")

        # 更新 Image 控件的 src_base64 属性
        image1.src_base64 = newstring
        image1.update()

    page.add(
        ft.Row(controls=[image1], alignment='center'),
        ft.Row(controls=[ft.TextButton("Test", on_click=update_image)], alignment='center')
    )

ft.app(target=main)
登录后复制

代码解释:

  • image_path: 指定了图片文件的路径。 每次点击更新按钮的时候,都会重新读取该路径下的图片,因此确保该路径下的图片已经被更新。
  • update_image(e) 函数:这个函数是关键,它负责重新读取图片,将其转换为 Base64 字符串,并更新 ft.Image 控件的 src_base64 属性。 每次点击按钮都会执行该函数。
  • image1.update(): 调用 image1.update() 方法,强制 Flet 刷新 ft.Image 控件。
  • nonlocal image1: image1 是在 main 函数中定义的,如果在 update_image 函数中要修改它,需要使用 nonlocal 关键字声明。

注意事项:

AI图像编辑器
AI图像编辑器

使用文本提示编辑、变换和增强照片

AI图像编辑器 46
查看详情 AI图像编辑器
  • 确保安装了 Pillow 库:pip install Pillow。
  • 如果图片文件非常大,频繁的读取和编码可能会影响性能。可以考虑使用其他优化方法,例如使用线程或进程来异步处理图片。
  • 如果图片格式不是 JPEG,需要修改 pil_img.save(buff, format="JPEG") 中的 format 参数。

总结:

通过重新读取图片文件并将其转换为 Base64 编码的字符串,可以有效地解决 Flet 中动态刷新图片的问题。这种方法可以确保每次都显示最新的图片内容,即使文件名保持不变。 这种方法适用于需要实时显示外部程序修改的图片的情况,例如监控画面或图像处理结果。

以上就是使用 Flet 刷新动态变化的图片的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号