您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
三六零分类信息网 > 红河分类信息网,免费分类信息发布

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

2026/2/28 19:18:07发布29次查看
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); } } }
运行结果:
马赛克程度深浅的变化
createmosaic(mem_context, mem_canvas.width, mem_canvas.height, 8);
只要更改createmosaic的第四个参数的值就可以改变马赛克程度的深浅。
当第四个参数值为4时图像的马赛克效果
当第四个参数值为2时图像的马赛克效果
以上就是如何使用html5 canvas实现图像的马赛克的详细内容。
红河分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product