Displaying image pixels into ASCII


Convert pixel data into series of letters and characters.


HTML

1   <!DOCTYPE html>
2   <html lang="en">
3   <head>
4       <title>Image to ASCII</title>
5       <style>
6           * {
7               padding: 0;
8               margin: 0;
9               background-color: white;
10               font: 1em monospace;
11               line-height: 6pt;
12               color: black;
13           }
14       </style>
15   </head>
16   <body>
17   
18       <img src="https://drive.google.com/uc?id=1Pz4u6FmmBs07KFPI2YnEwoqpbUY46F36" id="image" alt="" style="display: none;" />
19   
20       <script>
21           const charset = 'MNFV$I*:.'.split('')
22           const len = charset.length-1
23   
24           document.getElementById("image").onload = function() {
25               let canvas = document.createElement('canvas')
26               canvas.width = this.width
27               canvas.height = this.height
28               let ctx = canvas.getContext('2d');
29               ctx.drawImage(this, 0, 0);
30               var data= ctx.getImageData(0, 0, this.width, this.height)
31   
32               for( let y=0; y<this.height; y++ )
33               {
34                   var s = ""
35                   for( let x=0; x<this.width; x++ )
36                   {
37                       var i = ( x + y * this.width ) * 4
38                       var r = data.data[i];
39                       var g = data.data[i + 1];
40                       var b = data.data[i + 2];
41                       var a = data.data[i + 3];
42   
43                       var ave = (r+g+b) / 3
44                       var n = Math.round( (ave * len) / 255 )
45                       s += charset[n]
46                   }
47                   var span = document.createElement("span")
48                   span.innerHTML = s.replace(/ /gi, ' ')
49                   document.body.append( span )
50                   document.body.append( document.createElement("br") )
51               }
52           }
53       </script>
54   </body>
55   </html>
Engr. Jumar Hamac
Web Developer

Electronics Engineer by Profession.
Loves coding and painting.