0
我目前正在設計一個html5幻燈片註釋產品,它支持所有支持html5畫布的平板電腦+瀏覽器。我有它將我的註釋保存到計算機的畫布上,但不保存到平板電腦本身。保存html5畫布到平板電腦
在所有方面,理想的情況是將畫布註釋數據保存爲mysql數據庫中的數據,但我無法使用Ajax。
所以我堅持把註釋的圖像保存到本地機器上的圖像。
這裏是我的代碼來做到這一點(我使用canvas2image)
的window.onload =函數(){
var bMouseIsDown = false;
var oCanvas = document.getElementById("drop1");
var oCtx = oCanvas.getContext("2d");
var imgData = oCanvas.toDataURL();
var iWidth = oCanvas.width;
var iHeight = oCanvas.height;
var img = new Image();
img.src = "Lectures/<?php echo $_REQUEST["ClassID"]; ?>/<?php echo $_REQUEST["CatID"]; ?>/Slide<?php echo $_REQUEST["Slide"]; ?>.png";
img.onload = function() {
oCtx.drawImage(img, 0, 0)
}
oCanvas.onmousedown = function(e) {
bMouseIsDown = true;
iLastX = e.clientX - 130;
iLastY = e.clientY - oCanvas.offsetTop + (window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop);
}
oCanvas.onmouseup = function() {
bMouseIsDown = false;
iLastX = -1;
iLastY = -1;
}
oCanvas.onmousemove = function(e) {
if (bMouseIsDown) {
var iX = e.clientX-130;
var iY = e.clientY - oCanvas.offsetTop + (window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop);
oCtx.moveTo(iLastX, iLastY);
oCtx.lineTo(iX, iY);
oCtx.stroke();
iLastX = iX;
iLastY = iY;
}
}
function showDownloadText() {
document.getElementById("buttoncontainer").style.display = "none";
document.getElementById("textdownload").style.display = "block";
}
function hideDownloadText() {
document.getElementById("buttoncontainer").style.display = "block";
document.getElementById("textdownload").style.display = "none";
}
function convertCanvas(strType) {
if (strType == "PNG")
var oImg = Canvas2Image.saveAsPNG(oCanvas, true);
if (strType == "BMP")
var oImg = Canvas2Image.saveAsBMP(oCanvas, true);
if (strType == "JPEG")
var oImg = Canvas2Image.saveAsJPEG(oCanvas, true);
if (!oImg) {
alert("Sorry, this browser is not capable of saving " + strType + " files!");
return false;
}
oImg.id = "canvasimage";
oImg.style.border = oCanvas.style.border;
oCanvas.parentNode.replaceChild(oImg, oCanvas);
showDownloadText();
}
function saveCanvas(pCanvas, strType) {
var bRes = false;
if (strType == "PNG")
bRes = Canvas2Image.saveAsPNG(oCanvas);
if (strType == "BMP")
bRes = Canvas2Image.saveAsBMP(oCanvas);
if (strType == "JPEG")
bRes = Canvas2Image.saveAsJPEG(oCanvas);
if (!bRes) {
alert("Sorry, this browser is not capable of saving " + strType + " files!");
return false;
}
}
document.getElementById("savepngbtn").onclick = function() {
saveCanvas(oCanvas, "PNG");
}
document.getElementById("savebmpbtn").onclick = function() {
saveCanvas(oCanvas, "BMP");
}
document.getElementById("savejpegbtn").onclick = function() {
saveCanvas(oCanvas, "JPEG");
}
document.getElementById("convertpngbtn").onclick = function() {
convertCanvas("PNG");
}
document.getElementById("convertbmpbtn").onclick = function() {
convertCanvas("BMP");
}
document.getElementById("convertjpegbtn").onclick = function() {
convertCanvas("JPEG");
}
document.getElementById("resetbtn").onclick = function() {
var oImg = document.getElementById("canvasimage");
oImg.parentNode.replaceChild(oCanvas, oImg);
hideDownloadText();
}
}
您是否考慮過HTML5 File API? http://stackoverflow.com/questions/6723931/javascript-previews-with-new-filereader-api-and-dataurls-seem-inefficient/6723973#6723973 – pimvdb
爲什麼不使用'localStorage'? https://developer.mozilla.org/en/DOM/Storage,這裏是一些演示代碼http://html5tutorial.net/tutorials/working-with-html5-localstorage.html – Prusse
本地存儲問題是這樣的一所大學。幾個人將使用這些平板電腦,並不總是得到相同的。同樣,如果有人要擦拭餅乾,一切都會丟失。 – Dom