在 html5 中将多个画布转换为数据URL

convert multiple canvases to dataURL in html5

本文关键字:转换 URL 数据 布转换 html5      更新时间:2023-09-26

我想连接多个画布以制作单个图像。那么有没有办法掩盖多个画布来toDataURL制作单个图像呢?

创建一个函数,该函数接受多个参数(canvas 元素),将它们放在一个空白画布上,然后返回新制作的画布的数据URL。

var getImadeData = function () {
    var i = arguments.length,
        tempCanvas = document.createElement("canvas"),
        ctx = tempCanvas.getContext("2d");
     while (i--) {
        ctx.drawImage(arguments[i], 0, 0);
    };
    return tempCanvas.toDataURL();
};

现在只需将要放入一个数据URL中的多个画布元素提供给函数即可。

var newData = getImageData(canvas1, canvas2, canvas3);

在此示例中,最后一个画布首先放置在空白画布上,因此请确保对画布元素进行适当的排序。

是的

,画布 2D 呈现上下文上的 drawImage 方法接受画布元素作为图像元素。所以你所要做的就是:

  • 创建新画布
  • 获取其上下文
  • drawImage绘制所有其他画布
  • 从此新画布中提取最终图像

试试这个例子,希望它能帮助看到这里

                //html block

                <canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;">

                </canvas>
                <canvas id="myCanvas1" width="200" height="100" style="border:1px solid #c3c3c3;">
                Your browser does not support the canvas element.
                </canvas>
                <canvas id="Canvasimage" width="500" height="100" style="border:1px solid #c3c3c3;">
                Your browser does not support the canvas element.
                </canvas>
    <img id="finalimage" width="500" height="100"  style="border:1px solid #c3c3c3;"/>
                //script block
                function loadImages(sources, callback) {
                    var images = {};
                    var loadedImages = 0;
                    var numImages = 0;
                    // get num of sources
                    for (var src in sources) {
                        numImages++;
                    }
                    for (var src in sources) {
                        images[src] = new Image();
                        images[src].onload = function () {
                            if (++loadedImages >= numImages) {
                                callback(images);
                            }
                        };
                        images[src].src = sources[src];
                    }
                }
                window.onload = function (images) {
            //Canvas first  here
                    var c = document.getElementById("myCanvas");
                    var ctx = c.getContext("2d");
                    ctx.fillStyle = "#FF0000";
                    ctx.fillRect(0, 0, 200, 100);
                 //Canvas second here
                    var c1 = document.getElementById("myCanvas1");
                    var ctx1 = c1.getContext("2d");
                    ctx1.fillStyle = "#00FF00";
                    ctx1.fillRect(0, 0, 200, 100);

               //Canvas final here.
                    var canvas = document.getElementById("Canvasimage");
                    var context = canvas.getContext("2d");
                    var sources = {
                        darthVader: c.toDataURL("image/png"),
                        yoda: c1.toDataURL("image/png")
                    };
                    loadImages(sources, function (images) {
                        context.drawImage(images.darthVader, 100, 30, 200, 137);
                        context.drawImage(images.yoda, 350, 55, 93, 104);
//finalimage  here which has two canvas data
                var finalimage = document.getElementById("finalimage");
        finalimage.src = canvas.toDataURL("image/png"); 
                    });
                };