Created
December 22, 2021 05:50
-
-
Save abhilashsajeev/022f73b6443393f2d8de77de17ecc12a to your computer and use it in GitHub Desktop.
CANVAS draw text and identify
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/tesseract.js/2.1.5/tesseract.min.js" integrity="sha512-QMGuBW4cKAKmxjxukfPlQqFL8Tc2yYWTBhg9o8fKx06BGZrNXMmafjtnmXthGasytcaIILHRrg5N5Hw0yOuSjw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> | |
<script type="text/javascript"> | |
var canvas, ctx, flag = false, | |
prevX = 0, | |
currX = 0, | |
prevY = 0, | |
currY = 0, | |
dot_flag = false; | |
var x = "black", | |
y = 2; | |
function init() { | |
canvas = document.getElementById('can'); | |
ctx = canvas.getContext("2d"); | |
w = canvas.width; | |
h = canvas.height; | |
canvas.addEventListener("touchstart", function (e) { | |
findxytouch('down', e) | |
}, false); | |
canvas.addEventListener("touchmove", function (e) { | |
findxytouch('move', e) | |
}, false); | |
canvas.addEventListener("touchend", function (e) { | |
findxytouch('up', e) | |
}, false); | |
canvas.addEventListener("mousemove", function (e) { | |
findxy('move', e) | |
}, false); | |
canvas.addEventListener("mousedown", function (e) { | |
findxy('down', e); | |
}, false); | |
canvas.addEventListener("mouseup", function (e) { | |
findxy('up', e) | |
}, false); | |
canvas.addEventListener("mouseout", function (e) { | |
findxy('out', e) | |
}, false); | |
} | |
function color(obj) { | |
switch (obj.id) { | |
case "green": | |
x = "green"; | |
break; | |
case "blue": | |
x = "blue"; | |
break; | |
case "red": | |
x = "red"; | |
break; | |
case "yellow": | |
x = "yellow"; | |
break; | |
case "orange": | |
x = "orange"; | |
break; | |
case "black": | |
x = "black"; | |
break; | |
case "white": | |
x = "white"; | |
break; | |
} | |
if (x == "white") y = 14; | |
else y = 2; | |
} | |
function draw() { | |
ctx.beginPath(); | |
ctx.moveTo(prevX, prevY); | |
ctx.lineTo(currX, currY); | |
ctx.strokeStyle = x; | |
ctx.lineWidth = y; | |
ctx.stroke(); | |
ctx.closePath(); | |
} | |
function erase() { | |
var m = confirm("Want to clear"); | |
if (m) { | |
ctx.clearRect(0, 0, w, h); | |
document.getElementById("canvasimg").style.display = "none"; | |
} | |
} | |
function save() { | |
document.getElementById("canvasimg").style.border = "2px solid"; | |
var dataURL = canvas.toDataURL(); | |
document.getElementById("canvasimg").src = dataURL; | |
document.getElementById("canvasimg").style.display = "inline"; | |
Tesseract.recognize( | |
document.getElementById('can'), | |
'eng', | |
{ logger: m => console.log("tesseract logs",m) } | |
).then(({ data: { text } }) => { | |
console.log("text from tesseract===> ",text); | |
document.getElementById('cantext').innerHTML = text; | |
}) | |
} | |
function findxy(res, e) { | |
if (res == 'down') { | |
prevX = currX; | |
prevY = currY; | |
currX = e.clientX - canvas.offsetLeft; | |
currY = e.clientY - canvas.offsetTop; | |
flag = true; | |
dot_flag = true; | |
if (dot_flag) { | |
ctx.beginPath(); | |
ctx.fillStyle = x; | |
ctx.fillRect(currX, currY, 2, 2); | |
ctx.closePath(); | |
dot_flag = false; | |
} | |
} | |
if (res == 'up' || res == "out") { | |
flag = false; | |
} | |
if (res == 'move') { | |
if (flag) { | |
prevX = currX; | |
prevY = currY; | |
currX = e.clientX - canvas.offsetLeft; | |
currY = e.clientY - canvas.offsetTop; | |
draw(); | |
} | |
} | |
} | |
function findxytouch(res, e) { | |
if (res == 'down') { | |
prevX = currX; | |
prevY = currY; | |
currX = e.touches[0].pageX - canvas.offsetLeft; | |
currY = e.touches[0].pageY - canvas.offsetTop; | |
flag = true; | |
dot_flag = true; | |
if (dot_flag) { | |
ctx.beginPath(); | |
ctx.fillStyle = x; | |
ctx.fillRect(currX, currY, 2, 2); | |
ctx.closePath(); | |
dot_flag = false; | |
} | |
} | |
if (res == 'up' || res == "out") { | |
flag = false; | |
} | |
if (res == 'move') { | |
if (flag) { | |
prevX = currX; | |
prevY = currY; | |
currX = e.touches[0].pageX - canvas.offsetLeft; | |
currY = e.touches[0].pageY - canvas.offsetTop; | |
draw(); | |
} | |
} | |
} | |
</script> | |
<body onload="init()" style="overscroll-behavior: contain;"> | |
<canvas id="can" width="600" height="400" style="position:absolute;top:10%;left:10%;border:2px solid;"></canvas> | |
<div style="position:absolute;top:12%;left:43%;">Choose Color</div> | |
<div style="position:absolute;top:15%;left:45%;width:10px;height:10px;background:green;" id="green" onclick="color(this)"></div> | |
<div style="position:absolute;top:15%;left:46%;width:10px;height:10px;background:blue;" id="blue" onclick="color(this)"></div> | |
<div style="position:absolute;top:15%;left:47%;width:10px;height:10px;background:red;" id="red" onclick="color(this)"></div> | |
<div style="position:absolute;top:17%;left:45%;width:10px;height:10px;background:yellow;" id="yellow" onclick="color(this)"></div> | |
<div style="position:absolute;top:17%;left:46%;width:10px;height:10px;background:orange;" id="orange" onclick="color(this)"></div> | |
<div style="position:absolute;top:17%;left:47%;width:10px;height:10px;background:black;" id="black" onclick="color(this)"></div> | |
<div style="position:absolute;top:20%;left:43%;">Eraser</div> | |
<div style="position:absolute;top:22%;left:45%;width:15px;height:15px;background:white;border:2px solid;" id="white" onclick="color(this)"></div> | |
<img id="canvasimg" style="position:absolute;top:10%;left:52%;" style="display:none;"/> | |
<h3 id="cantext"> Default Text from canvas </h3> | |
<input type="button" value="save" id="btn" size="30" onclick="save()" style="position:absolute;top:85%;left:10%;"> | |
<input type="button" value="clear" id="clr" size="23" onclick="erase()" style="position:absolute;top:85%;left:15%;"> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment