HTML5画布像素图像的焦点

本文介绍了一种利用HTML5 Canvas实现图像像素化的技术,通过调整像素大小和迭代绘制过程,达到图像风格化的视觉效果。代码示例展示了如何在网页中动态加载图片并进行像素化处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

感觉这个代码还真的是挺好的啊,这个是比较不错,大家直接看吧。

<!DOCTYPE HTML>
<html>
  <head>
    <style>
      body {
        margin: 0px;
        padding: 0px;
      }
    </style>
  </head>
  <body>
    <canvas id="myCanvas" width="578" height="400"></canvas>
    <script>
      var pixelation = 40;

      function focusImage(context, imageObj, sourceWidth, sourceHeight, destX, destY) {
        var sourceX = destX;
        var sourceY = destY;

        var imageData = context.getImageData(sourceX, sourceY, sourceWidth, sourceHeight);
        var data = imageData.data;

        for(var y = 0; y < sourceHeight; y += pixelation) {
          for(var x = 0; x < sourceWidth; x += pixelation) {
            var red = data[((sourceWidth * y) + x) * 4];
            var green = data[((sourceWidth * y) + x) * 4 + 1];
            var blue = data[((sourceWidth * y) + x) * 4 + 2];

            for(var n = 0; n < pixelation; n++) {
              for(var m = 0; m < pixelation; m++) {
                if(x + m < sourceWidth) {
                  data[((sourceWidth * (y + n)) + (x + m)) * 4] = red;
                  data[((sourceWidth * (y + n)) + (x + m)) * 4 + 1] = green;
                  data[((sourceWidth * (y + n)) + (x + m)) * 4 + 2] = blue;
                }
              }
            }
          }
        }

        // overwrite original image
        context.putImageData(imageData, destX, destY);
        pixelation -= 1;
      }
      var fps = 20;
      // frames / second
      var timeInterval = 1000 / fps;
      // milliseconds
      var canvas = document.getElementById('myCanvas');
      var context = canvas.getContext('2d');

      var imageObj = new Image();
      imageObj.onload = function() {
        var sourceWidth = imageObj.width;
        var sourceHeight = imageObj.height;
        var destX = canvas.width / 2 - sourceWidth / 2;
        var destY = canvas.height / 2 - sourceHeight / 2;

        var intervalId = setInterval(function() {
          context.drawImage(imageObj, destX, destY);

          if(pixelation < 1) {
            clearInterval(intervalId);
          }
          else {
            focusImage(context, imageObj, sourceWidth, sourceHeight, destX, destY);
          }

        }, timeInterval);
      };

      imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';

    </script>
  </body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值