javascript - JS实现马赛克图片效果完整示例

前端之家收集整理的这篇文章主要介绍了javascript - JS实现马赛克图片效果完整示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

主要介绍了JS实现马赛克图片效果,结合完整实例形式分析了JavaScript基于HTML5 canvas图形元素绘制实现马赛克效果相关操作技巧,需要的朋友可以参考下

本文实例讲述了JS实现马赛克图片效果分享给大家供大家参考,具体如下:

整体逻辑:获取oldImg图片的像素信息,以5*5为单位,在5*5单位中取到一个随机像素并赋值给5*5中的所有像素点,加以循环,以实现马赛克效果

  1. <!DOCTYPE html>
  2. <html>
  3.   <head>
  4.     <Meta charset="UTF-8">
  5.     <title>JS图片马赛克 www.jb51.cc 编程之家</title>
  6.     <style type="text/css">
  7.       * {
  8.         margin: 0;
  9.         padding: 0;
  10.       }
  11.       body {
  12.         background-color: grey;
  13.         text-align: center;
  14.       }
  15.       #myCanvas {
  16.         background-color: rgba(250, 0, 0, 0.3);
  17.       }
  18.     </style>
  19.   </head>
  20.   <body>
  21.     <canvas id="myCanvas" width="500" height="400"></canvas>
  22.   </body>
  23.   <script type="text/javascript">
  24.     window.onload = function() {
  25.       var myCanvas = document.getElementById('myCanvas');
  26.       var painting = myCanvas.getContext('2d');
  27.        //生成一个图片节点
  28.       var imgNode = new Image();
  29.       imgNode.src = '1.jpg';
  30.       //调用函数
  31.       drawImg(imgNode);
  32.       function drawImg(imgNode) {
  33.         //图片加载后执行马赛克实现语句:5个一组取到随机像素赋给新图里的五个一组
  34.         imgNode.onload = function() {
  35.           painting.drawImage(imgNode, 0, 0, 250, 400);
  36.           var size = 5;
  37.           //获取老图所有像素点
  38.           var oldImg = painting.getImageData(0, 0, 250, 400)
  39.           //创建新图像素对象
  40.           var newImg = painting.createImageData(250, 400)
  41.           for(var i = 0; i < oldImg.width; i++) {
  42.             for(var j = 0; j < oldImg.height; j++) {
  43.               //从5*5中获取单个像素信息
  44.               var color = getPxInfo(oldImg, Math.floor(* size + Math.random() * size), Math.floor(* size + Math.random() * size))
  45.               //写入单个像素信息
  46.               for(var a = 0; a < size; a++) {
  47.                 for(var b = 0; b < size; b++) {
  48.                   //              (a,b)
  49.                   setPxInfo(newImg, i * size + a, j * size + b, color);
  50.                 }
  51.               }
  52.             }
  53.           }
  54.           painting.putImageData(newImg, 250, 0)
  55.         }
  56.       }
  57.       //读取单个像素信息
  58.       function getPxInfo(imgDate, x, y) {
  59.         var colorArr = [];
  60.         var width = imgDate.width;
  61.         colorArr[0] = imgDate.data[(width * y + x) * 4 + 0]
  62.         colorArr[1] = imgDate.data[(width * y + x) * 4 + 1]
  63.         colorArr[2] = imgDate.data[(width * y + x) * 4 + 2]
  64.         colorArr[3] = imgDate.data[(width * y + x) * 4 + 3]
  65.         return colorArr;
  66.       }
  67.       //写入单个像素信息
  68.       function setPxInfo(imgDate, x, y, colors) {
  69.         //(x,y) 之前有多少个像素点 == width*y + x
  70.         var width = imgDate.width;
  71.         imgDate.data[(width * y + x) * 4 + 0] = colors[0];
  72.         imgDate.data[(width * y + x) * 4 + 1] = colors[1];
  73.         imgDate.data[(width * y + x) * 4 + 2] = colors[2];
  74.         imgDate.data[(width * y + x) * 4 + 3] = colors[3];
  75.       }
  76.     }
  77.   </script>
  78. </html>


猜你在找的JavaScript相关文章