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

如何通过JavaScript将Flask API返回的PNG图片显示到HTML前端?

解决Flask API返回PNG图片无法在HTML显示的问题

问题根源

你当前的AJAX请求默认把二进制图片数据解析成了字符串,导致后续转Base64时数据损坏,所以图片无法正常渲染。需要正确处理二进制响应数据。

方案一:修改AJAX请求处理二进制数据

调整$.ajax配置,指定响应类型为blob,再通过URL.createObjectURL生成图片可识别的临时URL:

// figure image
$.ajax({
  type: "GET",
  url: `/international/figure/${data_result["id"]}/png`,
  xhrFields: {
    responseType: 'blob' // 明确要求返回二进制Blob类型数据
  },
  success: function (blobData) {
    const graph = document.createElement("img");
    // 生成临时URL供img标签使用,比转Base64更高效
    graph.src = URL.createObjectURL(blobData);
    // 图片加载完成后释放临时URL,避免内存泄漏
    graph.onload = function() {
      URL.revokeObjectURL(graph.src);
    };
    document.getElementById("imageContainer").appendChild(graph);
  }
});

方案二:直接使用img标签(更简洁)

不需要AJAX,直接把API地址赋值给img的src属性,浏览器会自动处理二进制图片的加载:

<div id="imageContainer"></div>
<script>
  const graph = document.createElement("img");
  graph.src = `/international/figure/${data_result["id"]}/png`;
  document.getElementById("imageContainer").appendChild(graph);
</script>

补充:如果必须使用Base64格式

若业务要求必须转成Base64,可以通过FileReader处理Blob数据:

$.ajax({
  type: "GET",
  url: `/international/figure/${data_result["id"]}/png`,
  xhrFields: {
    responseType: 'blob'
  },
  success: function (blobData) {
    const reader = new FileReader();
    reader.onload = function(e) {
      const graph = document.createElement("img");
      graph.src = e.target.result; // 结果为base64格式的dataURL
      document.getElementById("imageContainer").appendChild(graph);
    };
    reader.readAsDataURL(blobData);
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:31:50