You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eel模块开发Python程序时调用eel.getImgSrc返回null问题排查

问题根因

Eel 依赖 JSON 格式完成 Python 端与 JavaScript 端的跨进程数据传输,JSON 本身不支持二进制类型序列化:你在 Python 端 getImgSrc 函数返回的是 bytes 类型的文件二进制数据,Eel 无法完成序列化转换,因此前端收到的返回值为 null。
此外当前代码直接使用 open 打开文件后未主动关闭,会产生文件资源泄漏的隐患。

解决方案

方案1:二进制转Base64字符串传输(通用方案)

将图片二进制内容编码为 Base64 字符串后返回,JSON 可直接序列化字符串类型,前端拿到后可直接用于图片渲染等场景,代码修改如下:

app.py 修改后代码

import base64
import eel

@eel.expose
def getImgSrc(path):
    # 用with上下文管理器自动关闭文件,避免资源泄漏
    with open(path, 'rb') as f:
        img_bytes = f.read()
        # 二进制转base64编码字符串
        return base64.b64encode(img_bytes).decode('utf-8')

main.js 修改后代码

async function run(path) {
    let base64Img = await eel.getImgSrc(path)()
    console.log(base64Img);
    // 若需直接渲染图片,补充对应格式前缀即可,示例为png格式,jpeg可替换为image/jpeg
    // document.querySelector('#showImg').src = `data:image/png;base64,${base64Img}`
}

方案2:直接返回本地路径(仅前端渲染图片场景适用)

如果不需要对图片字节做业务处理,仅需要在前端渲染,可直接返回图片的本地绝对路径,前端拼接 file:/// 前缀即可加载,性能更高无转码开销:

app.py 对应代码

import os
import eel

@eel.expose
def getImgSrc(path):
    # 返回绝对路径
    return os.path.abspath(path)

main.js 对应代码

async function run(path) {
    let localPath = await eel.getImgSrc(path)()
    console.log(localPath);
    document.querySelector('#showImg').src = `file:///${localPath}`
}

内容的提问来源于stack exchange,提问作者Giant Brain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:06:05