我正在Android上做一个webapp,我有一个HTML5 Canvas,用户可以使用触摸事件绘制他想要的东西。我想把它保存在SD卡上,所以在本地。并且不能使用任何服务器端脚本(php等)来做那些事情。
我正在使用magictouch.js
示例:
<canvas id="example" height=450 width=300></canvas>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="magictouch.js"></script>
<script>
var CanvasDrawr = function(options) {
var canvas = document.getElementById(options.id),
ctxt = canvas.getContext("2d");
var img = canvas.toDataURL("image/png");
ctxt.lineWidth = options.size || Math.ceil(Math.random() * 35);
ctxt.lineCap = options.lineCap || "round";
ctxt.pX = undefined;
ctxt.pY = undefined;
var lines = [,,];
var offset = $(canvas).offset();
var self = {
//bind click events
init: function() {
canvas.addEventListener('touchstart', self.preDraw, false);
canvas.addEventListener('touchmove', self.draw, false);
},
preDraw: function(event) {
$.each(event.touches, function(i, touch) {
var id = touch.identifier;
lines[id] = { x : this.pageX - offset.left,
y : this.pageY - offset.top,
color : options.color || ["black"]
};
});
event.preventDefault();
},
draw: function(event) {
var e = event, hmm = {};
$.each(event.touches, function(i, touch) {
var id = touch.identifier;
var moveX = this.pageX - offset.left - lines[id].x,
moveY = this.pageY - offset.top - lines[id].y;
var ret = self.move(id, moveX, moveY);
lines[id].x = ret.x;
lines[id].y = ret.y;
});
event.preventDefault();
},
move: function(i, changeX, changeY) {
ctxt.strokeStyle = lines[i].color;
ctxt.beginPath();
ctxt.moveTo(lines[i].x, lines[i].y);
ctxt.lineTo(lines[i].x + changeX, lines[i].y + changeY);
ctxt.stroke();
ctxt.closePath();
return { x: lines[i].x + changeX, y: lines[i].y + changeY };
}
};
return self.init();
};
$(function(){
var super_awesome_multitouch_drawing_canvas_thingy = new CanvasDrawr({id:"example", size: 2 });
console.log('loaded');
});
</script>
</body>
但我在互联网上遇到的所有例子都与服务器上的php脚本一起使用,以解码并将canva保存为图像。实际上只想在我的Android设备上,在我的SD卡中,通过使用HTML5 / Javascript ...
感谢。
答案 0 :(得分:2)
你检查了nihilogic图书馆吗? http://www.nihilogic.dk/labs/canvas2image/
它使用toDataUrl()函数,所以你可能会得到一个丑陋的图片名称,但你仍然会有一张图片。
你也可以使用downloadify但是它使用flash而且我知道flash通常不在android上,取决于你的情况https://github.com/dcneiner/Downloadify
此外,我和kbok一样,不知道phoneGap,但你可能会尝试同时使用context.toDataUrl()和fwrite。
答案 1 :(得分:0)
这是不可能的,因为您无法从网页访问文件系统(除了一些在这里没用的边缘情况)。
当然,我建议使用服务器来生成此文件。由于无法实现,您可以通过使用插件或Java小程序找到在客户端上执行“本机”代码的方法。
答案 2 :(得分:0)
为什么不将服务器端的图像转换为图像,然后允许用户将图像下载到手机上?