【问题标题】:Get canvas toDataUrl() after processing Javascript处理Javascript后获取canvas toDataUrl()
【发布时间】:2016-06-23 08:40:53
【问题描述】:

我有一个 Javascript 函数,可以创建一个画布,在上面写一个图像和一个文本。在 and 我需要 base64 dataUrl 但我得到的只是一个空白画布。

这是我的功能:

 function createBreadCrumb(label) {

    var canvas = document.createElement('canvas');
        canvas.width = 25;
        canvas.height = 30;

        var img = new Image;
        img.src = 'map-pin-breadcrumb.png';


        var ctx=canvas.getContext("2d");

        img.onload = function(){

            ctx.drawImage(img, 0, 0);
            ctx.font = "11px Arial";
            ctx.textAlign="center"; 
            ctx.fillText(label, 12, 16);


        };


       return canvas.toDataURL();

}

【问题讨论】:

    标签: javascript html canvas


    【解决方案1】:

    您在加载图像之前调用toDataURL。结果,您的画布指令都没有运行。因为图片是异步加载的,所以无法同步获取结果画布,必须使用回调或promise。

    试试这个。

    function createBreadCrumb(label, callback) {
    
        var canvas = document.createElement('canvas');
            canvas.width = 25;
            canvas.height = 30;
    
            var img = new Image;
            var ctx = canvas.getContext("2d");
    
            img.onload = function(){
    
                ctx.drawImage(img, 0, 0);
                ctx.font = "11px Arial";
                ctx.textAlign="center"; 
                ctx.fillText(label, 12, 16);
    
                callback(canvas.toDataURL());
            };
    
            img.src = 'map-pin-breadcrumb.png';
    }
    
    createBreadCrumb("hello", function(crumb){
      // do your stuff
    });
    

    【讨论】:

    • 我无法在“HTMLCanvasElement”上执行“toDataURL”:可能无法导出受污染的画布。 html 文件和图像在桌面上。
    • @IonVasile 不能使用 file:// 协议加载图像,而是使用服务器,以便您可以使用 http(s):// 加载它。如果来自不同的域,请确保您可以对图像使用 crossOrigin。否则会抛出这个错误。
    • @IonVasile 这看起来像是一个不同的问题。将图像的src 设置为http://placehold.it/25x30 是否有效?
    • 如果我在页面上有画布,则图像和文本会在页面上呈现。如果我设置外部图像 url,我会遇到同样的错误。
    • jsfiddle.net/q9kfh2pc/1 这是我在页面上渲染并且正在工作的时候:jsfiddle.net/q9kfh2pc/2
    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2017-08-03
    • 2013-09-29
    相关资源
    最近更新 更多