详解使用JS如何制作简单的ASCII图与单极图

  


  

  

在终端执行各种命令的时候经常会看到一些终端里显示出来的“图”片,远看仿佛一张图,近看则是一个个的ASCII码,它们大致长这样子

  

详解使用JS如何制作简单的ASCII图与单极图”> <br/>
  </p>
  <p>而今天我们要做的则是用JS把一张给定的图片转换成这种用ASCII字符组成的“ASCII图”先看看最终效果,假设我们给定的图片是这样子的,</p>
  <p> <img src=   var canvasContext=canvas.getContext (2 d);   canvasContext。drawImage (sourceImg, 0, 0);   var imgData=https://www.yisu.com/zixun/canvasContext.getImageData (0, 0, sourceImg。宽度,sourceImg.height);   var imgDataArray=imgData.data;      

那么对于某一个像素点的RGBA值就可以这样获取

        var r=imgDataArray [lineIndex];   var g=imgDataArray [lineIndex + 1];   var b=imgDataArray [lineIndex + 2];   var=imgDataArray [lineIndex + 3];      

其中lineIndex是遍历每一个像素点的基准变量。

  

  

灰度化,也就是获取像素点的灰度值。由于每一个像素点包含着RGBA四种信息,而我们需要将所有像素点的RGBA值分成8组,因此需要统一一下RGBA的值,最终得到一个值Y,而相应的像素点的RGBA值满足Y=R=G=B,在这里我们不考虑透明度α。由于RGB的值相等像素点颜色是介于白色与黑色之间的灰色,所以这一过程也称为灰度化。

  

灰度化算法有很多种,我们在这里采取最简单的方式,即

  

Y=(R + G + B) * 1/3
  

  

相应代码如下

        函数rgb2gray (r, g, b) {   返回r * 0.333 + g * 0.333 + b * 0.333;   }

详解使用JS如何制作简单的ASCII图与单极图