我有多個由JavaScript創建的畫布元素。我的問題是:「我怎樣才能把多個畫布元素放到一個畫布元素上?」。如何將多個畫布元素放入一個畫布元素中?
回答
在這裏你去;
- 它會抓住每一個畫布,讓他們PNG的
- 訪問緩衝區帆布和寫在彼此頂部的PNG的裏面
- 回寫緩存畫布PNG和發送它到IMG標籤
只要給#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" />';
}
這個工程,但你使用的是jQuery。有沒有可能做到這一點,而不使用jQuery? – Julian
當然;該問題已更新,現在可以在原生JavaScript上完全工作。 – 2013-04-19 14:55:08
您不需要創建中間圖像。 drawImage方法可以直接將另一個畫布作爲要繪製的圖像。 –
也許這樣的事情,源畫布導出爲圖像,油漆圖像到目標畫布(未經測試):
function drawCanvasOnOtherCanvas(src, target) {
var img = new Image();
img.onload = function() {
target.drawImage(img, 0, 0);
};
img.src = src.toDataURL('image/png');
}
畫布的方法的drawImage實際上可以拍攝另一張畫布而不是圖片 - 您無需首先將畫布轉換爲圖像。 (見WhatWG's documentation。)
我已經簡化Allendar的的jsfiddle證明:
基本上,所有你需要做的是:
targetCanvas.drawImage(sourceCanvas, 0, 0);
,你應該是好走。
- 1. 如何讓多個元素在畫布
- 2. 添加多個元素到畫布js
- 3. 動畫HTML畫布元素
- 4. 將畫布元素放在前面?
- 5. Html畫布繪圖放緩了太多的畫布元素
- 6. 畫布元素undefined
- 7. 如何用動畫使用javascript繪製多個畫布元素?
- 8. Ajax-ish更新一個畫布元素
- 9. 一個畫布元素的3D變換
- 10. 動態繪製一個畫布元素
- 11. 用一個畫布元素掩蓋div
- 12. 如何使用一個畫布元素作爲另一個畫布元素的背景?
- 13. 如何在畫布中放置兩個圖像元素?
- 14. P5js在畫布元素後面有一個div元素
- 15. 如何處理畫布中的多個元素
- 16. 座標縮放畫布元素
- 17. HTML5畫布旋轉單個元素
- 18. 畫布重疊元素
- 19. 畫布 - 元素覆蓋
- 20. 打印HTML5畫布元素
- 21. MooTools jQuery與畫布元素
- 22. 從畫布獲取元素
- 23. 畫布元素不更新
- 24. HTML5畫布元素樣式?
- 25. 覆蓋HTML畫布元素
- 26. 類似畫布的元素
- 27. 瞭解HTML5畫布元素
- 28. 移動HTML5畫布元素
- 29. 繪製到畫布%元素
- 30. 畫布元素禁用
你可以設置一個jsfiddle –