Source:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Maze-Scanner (Directional)</title>
<script type="text/javascript">
onload = function() {
// setup a canvas and copy the img element to it
var img=document.getElementById('img'),
w=img.width,
h=img.height,
canvas=document.createElement('canvas'),
ctx, pixels;
canvas.width=w;
canvas.height=h;
ctx=canvas.getContext('2d');
ctx.drawImage(img,0,0);
pixels=ctx.getImageData(0,0, w,h).data;
// read bitmap (threshold on red channel)
var maze=[];
for (var y=0; y<h; y++) {
var m=maze[y]=[], ofs=w*y*4;
for (var x=0; x<w; x++) {
m[x]= (pixels[ofs+x*4]>128)? 1:0;
}
}
// process directions (1: up, 2: left, 4: down, 8: right)
// edges are all zeros by definition (0 < n < length-1)
for (var r=1, rl=h-1; r<rl; r++) {
for (var c=1, cl=w-1; c<cl; c++) {
if (maze[r][c]) {
var b=0;
if (maze[r-1][c]) b = 1;
if (maze[r][c-1]) b |= 2;
if (maze[r+1][c]) b |= 4;
if (maze[r][c+1]) b |= 8;
maze[r][c] = b;
}
}
}
// prepare data
var data=[];
for (var i=0, ln=1001; i<h; i++, ln++) {
data.push(ln+' DATA '+maze[i].join(','));
}
// display it
document.getElementById('out').innerHTML=data.join('\n');
};
</script>
</head>
<body>
<img id="img" src="maze.gif" />
<pre id="out"></pre>
</body>
</html>