我正在尝试将我的HTML画布保存到我可以成功执行的文件中,但它并没有保存我拖入画布的任何对象。
因此,通过使用Draggable JQuery,我可以愉快地将我的对象移动到屏幕上并将其放在我的画布上。当我使用Canvas.ToDataURL()
保存画布时,它不保存我拖动的对象(并且在jsFiddle中对我的画布做了一些奇怪的事情,它似乎改变了画布的颜色?)。
要查看“工作”示例,请访问我的jsFiddle http://jsfiddle.net/JVSFS/74/
只需将绿色框拖到蓝色框上,然后单击“保存”按钮。结果将显示在下面(只是一个橙色框)。
HTML
<canvas id="MyCanvas" class="canvas"></canvas>
<div class="popup_click">
<div id="popup_title">Drag</div>
</div>
<asp:HiddenField ID="hideMe" runat="server" />
<asp:Button runat="server" OnClick="ClickMe" Text="Click" OnClientClick="SaveMe()" />
<button onclick="SaveMe()">Try it</button>
<p>Results: </p>
<img id="myImage" />
的JavaScript
$(document).ready(function () {
$('.popup_click').show(0).draggable();
});
function SaveMe() {
var canvas = document.getElementById("MyCanvas");
var context = canvas.getContext("2d");
context.fillStyle = "orange";
context.fillRect(0, 0, 100, 100);
var image = canvas.toDataURL("image/png");
document.getElementById("myImage").src = image;
document.getElementById("hideMe").value = image;
}
CSS
.popup_click {
background: #80FF80;
width: 50px; }
.canvas {
width: 100px;
height: 100px;
background-color: #0FC;
}
如何保存拖动的对象?我假设我必须告诉Canvas该对象是它的上下文的一部分,但不知道我和我自己的搜索是如何产生的。
答案 0 :(得分:1)
那是因为你的可拖动对象不在canves中。 它们是简单的html元素。 它只会保存使用canvas方法创建的对象。
任何方式to create html elements on canvas you have to use svg
。
Mozilla显示了很好的方法,但是你需要把所有的css都用到内联css之前
mozilla explanation
无论如何,在您的画布上使用svg,由于安全策略,您将无法使用toDataUrl
。
答案 1 :(得分:1)
来自https://developer.mozilla.org/en-US/docs/HTML/Canvas/Drawing_DOM_objects_into_a_canvas
您不能只将HTML绘制到画布中。相反,您需要使用包含要渲染的内容的SVG图像。要绘制HTML内容,您需要使用包含HTML的元素,然后将该SVG图像绘制到画布中。
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var data = "<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'>" +
"<foreignObject width='100%' height='100%'>" +
"<div xmlns='http://www.w3.org/1999/xhtml' style='font-size:40px'>" +
"<em>I</em> like <span style='color:white; text-shadow:0 0 2px blue;'>cheese</span>" +
"</div>" +
"</foreignObject>" +
"</svg>";
var DOMURL = self.URL || self.webkitURL || self;
var img = new Image();
var svg = new Blob([data], {type: "image/svg+xml;charset=utf-8"});
var url = DOMURL.createObjectURL(svg);
img.onload = function() {
ctx.drawImage(img, 0, 0);
DOMURL.revokeObjectURL(url);
};
img.src = url;