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

获取Canvas内图片Base64数据异常:更换图片后数据无变化求助

问题解决:Canvas导出Base64不随图片更新的问题

问题根源在于图片加载是异步操作,你当前代码里的canvas.toDataURL()是在调用make_base()后立刻执行的,此时图片还没加载完成,画布上根本没绘制任何内容,所以每次导出的都是空画布的Base64数据,自然换图片也不会有变化。

解决方法很直接:把获取Base64的代码放到图片的onload回调函数内部,确保图片绘制完成后再导出数据。同时注意变量声明,避免全局变量污染。

修改后的代码示例:

<!DOCTYPE html>
<html>
    <body>
        <canvas id="viewport" style="border:1px solid #d3d3d3;"></canvas>
        <script>
            var canvas = document.getElementById('viewport'),
                context = canvas.getContext('2d');

            make_base();

            function make_base() {
                // 用let声明变量,避免全局污染
                let base_image = new Image();
                base_image.src = 'https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png';
                base_image.onload = function(){
                    // 先完成图片绘制
                    context.drawImage(base_image, 0, 0);
                    // 绘制完成后再获取Base64数据
                    const base64Canvas = canvas.toDataURL("image/jpeg").split(';base64,')[1];
                    document.write('<br>');
                    document.write(base64Canvas);
                }
            }
        </script>
    </body>
</html>

额外提示:如果后续需要切换不同图片,也要确保每次更换图片资源后,都在新图片的onload回调里重新执行绘制和导出操作,不能在回调外部直接调用导出方法,否则还是会拿到旧画布内容或空画布的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:05:34