首页前端开发HTML如何使用HTML5 canvas实现图像的马赛克

如何使用HTML5 canvas实现图像的马赛克

时间2024-01-23 19:32:15发布访客分类HTML浏览1031
导读:收集整理的这篇文章主要介绍了如何使用HTML5 canvas实现图像的马赛克,觉得挺不错的,现在分享给大家,也给大家做个参考。HTML5 canvas可以处理很多的图像问题,那么如何使用HTML5 canvas实现图像的马赛克呢?本篇文章就...
收集整理的这篇文章主要介绍了如何使用HTML5 canvas实现图像的马赛克,觉得挺不错的,现在分享给大家,也给大家做个参考。HTML5 canvas可以处理很多的图像问题,那么如何使用HTML5 canvas实现图像的马赛克呢?本篇文章就来给大家介绍HTML5 canvas实现图像的马赛克的方法,下面我们一起来看具体内容。

我们先给出代码,然后分析

HTML5 canvas实现图像的马赛克代码如下

!DOCTYPE html>
    html>
    head>
    meta http-equiv="Content-type" content="text/html;
     charset=utf-8"/>
        tITle>
    /title>
    	meta charset="utf-8" />
      script type="text/javascript">
        VAR imageData;
    function draw() {
          var canvas = document.getElementById('SimpleCanvas');
                var mem_canvas = document.createElement('canvas');
            if (!canvas || !canvas.getContext) {
                  return false;
      }
                var context = canvas.getContext('2d');
                var img = new Image();
      img.onload = function onImageLoad() {
            mem_canvas.width = img.width;
            mem_canvas.height = img.height;
                  var mem_context = mem_canvas.getContext('2d');
            mem_context.drawImage(img, 0, 0);
            imageData = mem_context.getImageData(0, 0, mem_canvas.width, mem_canvas.height);
            CreateMosaic(mem_context, mem_canvas.width, mem_canvas.height, 8);
            context.drawImage(mem_canvas, 32, 32);
      }
          img.src = 'img/luffy.jpg';
     }
          function CreateMosaic(context, width,height,mosaicSize) {
                var x=0;
                      var y=0;
                      for (y = 0;
     y  height;
 y = y + mosaicSize) {
                        for (x = 0;
     x  width;
 x = x + mosaicSize) {
                                  var cR = imageData.data[(y * width + x) * 4];
                                  var cG = imageData.data[(y * width + x) * 4 + 1];
                                  var cB = imageData.data[(y * width + x) * 4 + 2];
              context.fillStyle = "rgb("+cR+","+cG+","+cB+")";
              context.fillRect(x, y, x + mosaicSize, y + mosaicSize);
        }
      }
    }
      /script>
    /head>
    body onload="draw()" style="background-color:#D0D0D0;
    ">
      canvas id="SimpleCanvas" width="640" height="360" style="background-color:#FFFFFF;
    ">
    /canvas>
      div>
    Canvas Demo/div>
      div id="output">
    /div>
    /body>
    /html>
    

说明:

body标签的on函数在显示页面时执行绘图功能。
draw函数在内存中创建HTML画布对象,读取原始图像并在画布上绘制它。调用渲染的画布对象的getImageData方法以获取像素信息。

   function draw() {
             var canvas = document.getElementById('SimpleCanvas');
                   var mem_canvas = document.createElement('canvas');
      if (!canvas || !canvas.getContext) {
                     return false;
      }
          var context = canvas.getContext('2d');
          var img = new Image();
      img.onload = function onImageLoad() {
            mem_canvas.width = img.width;
            mem_canvas.height = img.height;
            var mem_context = mem_canvas.getContext('2d');
            mem_context.drawImage(img, 0, 0);
            imageData = mem_context.getImageData(0, 0, mem_canvas.width, mem_canvas.height);
            CreateMosaic(mem_context, mem_canvas.width, mem_canvas.height, 8);
            context.drawImage(mem_canvas, 32, 32);
      }
          img.src = 'img/luffy.jpg';
     }
    

使用所读取的原始图像的宽度和高度,HTML画布的上下文,马赛克的大小以及原始图像的像素信息来执行马赛克处理。马赛克处理由CreateMosaic()函数实现。由于图像的像素信息大小很大,因此不存储在CreateMosaic()函数的参数中,而是存储在全局变量中。如果你想提高代码的可读性,可以赋予CreateMosaic()函数参数的结构。
在CreateMosaic中利用循环根据马赛克的大小来取出像素的值,如果马赛克的大小为4,可以取得每4个像素的像素值,使用获取的像素值的颜色在画布上绘制正方形的马赛克大小

 function CreateMosaic(context, width,height,mosaicSize) {
           var x=0;
                 var y=0;
          for (y = 0;
     y  height;
 y = y + mosaicSize) {
                   for (x = 0;
     x  width;
 x = x + mosaicSize) {
                        var cR = imageData.data[(y * width + x) * 4];
                             var cG = imageData.data[(y * width + x) * 4 + 1];
                             var cB = imageData.data[(y * width + x) * 4 + 2];
              context.fillStyle = "rgb("+cR+","+cG+","+cB+")";
              context.fillRect(x, y, x + mosaicSize, y + mosaicSize);
        }
      }
    }
    

运行结果:

@H_406_32@

马赛克程度深浅的变化

CreateMosaic(mem_context, mem_canvas.width, mem_canvas.height, 8);
    

只要更改CreateMosaic的第四个参数的值就可以改变马赛克程度的深浅。

当第四个参数值为4时图像的马赛克效果

当第四个参数值为2时图像的马赛克效果

以上就是如何使用HTML5 canvas实现图像的马赛克的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: HTML5 canvas中如何绘制图像下一篇:如何使用HTML5实现多个元素的拖放...猜你在找的html5相关文章 关于移动端h5开发相关内容总结2022-05-17html5教程-学表单的第二天2018-12-10html5教程-HTML5浏览器支持2018-12-10html5教程-HTML5智能表单2018-12-10html5教程-微信H5使用resLoader实现加载页效果2018-12-10html5教程-day01-初级-JS0-热身运动JS入门教程2018-12-10html5教程-html5shiv.js和respond.min.js2018-12-10html5教程-不同浏览器对于html5 audio标签和音频格式的兼容性2018-12-10html5教程-使用Html5实现手风琴案例2018-12-10html5教程-html5笔记2018-12-10 其他相关热搜词更多phpjavapython程序员load

若转载请注明出处: 如何使用HTML5 canvas实现图像的马赛克
本文地址: https://pptw.com/jishu/584562.html
如何在HTML5中使用SVG 什么是前端和后端

游客 回复需填写必要信息