[英]How can I put multiple canvas elements in to one canvas element?
我有多個JavaScript創建的畫布元素。 我的問題是:“如何將多個畫布元素放在一個畫布元素上?”。
干得好;
只需display: none;
#buffer
畫布元素即可display: none;
一切都會變得不可見(請參閱此處; http://jsfiddle.net/Allendar/UqxCY/2/ )。
的HTML
<body onload="generatePNG()">
<canvas id="c1"></canvas>
<canvas id="c2"></canvas>
<canvas id="c3"></canvas>
<canvas id="buffer"></canvas>
<div id="output">Empty</div>
</body>
的CSS
canvas[id^=c], div[id=output] {
border: 1px solid red;
}
canvas[id=buffer] {
border: 1px dotted green;
}
#output {
padding: 15px;
}
#output img {
border: 1px dotted blue;
}
的JavaScript
function generatePNG() {
var b_canvas1 = document.getElementById("c1");
var b_context1 = b_canvas1.getContext("2d");
b_context1.fillRect(10, 50, 50, 50);
var b_canvas2 = document.getElementById("c2");
var b_context2 = b_canvas2.getContext("2d");
b_context2.fillRect(80, 50, 50, 50);
var b_canvas3 = document.getElementById("c3");
var b_context3 = b_canvas3.getContext("2d");
b_context3.fillRect(150, 50, 50, 50);
var img1 = new Image();
img1.src = b_canvas1.toDataURL("image/png");
var img2 = new Image();
img2.src = b_canvas2.toDataURL("image/png");
var img3 = new Image();
img3.src = b_canvas3.toDataURL("image/png");
var buffer = document.getElementById("buffer");
var buffer_context = buffer.getContext("2d");
buffer_context.drawImage(img1, 0, 0);
buffer_context.drawImage(img2, 0, 0);
buffer_context.drawImage(img3, 0, 0);
var buffer_img = new Image();
buffer_img.src = buffer.toDataURL("image/png");
var output = document.getElementById('output');
output.innerHTML = '<img src="' + buffer_img.src + '" alt="Canvas Image" />';
}
畫布的drawImage方法實際上可以使用其他畫布而不是圖像-您無需先將畫布轉換為圖像。 (請參閱WhatWG的文檔 。)
我已經簡化了Allendar的JSFiddle,以演示:
基本上,您需要做的是:
targetCanvas.drawImage(sourceCanvas, 0, 0);
而且你應該很好走。
也許是這樣的,將源畫布導出到圖像,將該圖像繪制到目標畫布(未測試):
function drawCanvasOnOtherCanvas(src, target) {
var img = new Image();
img.onload = function() {
target.drawImage(img, 0, 0);
};
img.src = src.toDataURL('image/png');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.