Animating canvas to look like tv noise

前端 未结 7 2131
野趣味
野趣味 2020-12-22 17:22

I have a function named generateNoise() which creates a canvas element and paints random RGBA values to it; which, gives the appearance of noise.


<
7条回答
  •  甜味超标
    2020-12-22 17:49

    I tried to make a similar function a while ago. I set each pixel random value, and in addition to that, I overlayed a sinusodial wave that traveled upwards with time just to make it look more realistic. You can play with the constants in the wave to get different effects.

    var canvas = null;
    var context = null;
    var time = 0;
    var intervalId = 0;
    
    var makeNoise = function() {
      var imgd = context.createImageData(canvas.width, canvas.height);
      var pix = imgd.data;
    
      for (var i = 0, n = pix.length; i < n; i += 4) {
          var c = 7 + Math.sin(i/50000 + time/7); // A sine wave of the form sin(ax + bt)
          pix[i] = pix[i+1] = pix[i+2] = 40 * Math.random() * c; // Set a random gray
          pix[i+3] = 255; // 100% opaque
      }
    
      context.putImageData(imgd, 0, 0);
      time = (time + 1) % canvas.height;
    }
    
    var setup = function() {
      canvas = document.getElementById("tv");
      context = canvas.getContext("2d");
    }
    
    setup();
    intervalId = setInterval(makeNoise, 50);

    I used it as a preloader on a site. I also added a volume rocker as a loading bar, here's a screenshot:

    TV noise screenshot

提交回复
热议问题