JS使用canvas给图片打马赛克
2017-11-22 17:10
537 查看
简介
利用canvas加载图片后,画布上的各像素的颜色(r,g,b)值来填充色块,达到马赛克效果。效果图
代码
html<canvas id="canvas" data-src="images/test.jpg" width="800" height="600"></canvas>
javascript
const mosaicImage = (target, mosaicSize = 20) => { let canvas = document.getElementById(target), _canvas = document.createElement('canvas'); if (!canvas || !canvas.getContext) { return false; } /** * 根据图片填充马赛克块 */ const createMosaic = (context, width, height, size, data) => { for (let y = 0; y < height; y += size) { for (let x = 0; x < width; x += size) { /** * 取出像素的r,g,b,a值 */ let cR = data.data[(y * width + x) * 4], cG = data.data[(y * width + x) * 4 + 1], cB = data.data[(y * width + x) * 4 + 2]; context.fillStyle = `rgb(${cR},${cG},${cB})`; context.fillRect(x, y, x + size, y + size); } } }; /** * 将数据画到canvas */ const draw = (_context, imageData, context) => { createMosaic(_context, _canvas.width, _canvas.height, mosaicSize, imageData); context.drawImage(_canvas, 0, 0); }; const init = () => { let context = canvas.getContext('2d'); /** * 设置图片来源 */ let img = new Image(); img.src = canvas.getAttribute('data-src'); /** * 加载图片 */ img.onload = () => { let _context = _canvas.getContext('2d'), imageData; /** * 图片大小与canvas匹配 */ _canvas.width = img.width; _canvas.height = img.height; /** * 重置canvas画布大小 */ canvas.width = img.width; canvas.height = img.height; _context.drawImage(img, 0, 0); /** * 获取canvas各像素的颜色信息 * 像素的颜色信息从左到右,r, g, b, a 值排列 */ imageData = _context.getImageData(0, 0, _canvas.width, _canvas.height); draw(_context, imageData, context); }; }; init(); }; /** * div对象, 及马赛克大小 */ mosaicImage('canvas', 8);
查看原文:https://www.huuinn.com/archives/469
更多技术干货:风匀坊
关注公众号:风匀坊
相关文章推荐
- 使用js转化画布与图片(canvas与img)
- 如何使用js将canvas保存为图片文件,并且可以自定义文件名
- js移动端/H5同时选择多张图片上传并使用canvas压缩图片
- megapix-image插件 使用Canvas压缩图片上传 MegaPixImage.js下载
- js使用canvas绘制高清图片
- html5添加canvas来将图片制作成马赛克效果的js插件教程
- JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
- js应用:使用canvas给图片加水印
- 我的js游戏小引擎 —— 可使用canvas模式或DOM模式
- 【Vegas原创】访问owa,图片和js脚本不能正常显示和使用的解决方法
- 使用Form验证,未登录时登录页面无法显示图片、css、js文件的解决方法
- IE6 使用png透明图片的方法 [非JS方法]
- 使用JS实现图片无限循环左右滚动
- 终于搞定使用node.js +redis 作为服务端,提供图片上传存储服务
- 在网页中使用特殊字体的可选方案:图片,CSS3, sIFR, Typeface.js, cufon
- 使用canvas绘制股票图【envision.js】
- IE下使用excanvas.js之后动态创建的canvas不支持getContext的解决方法(转)
- jquery imgareaselect 使用利用js与程序结合实现图片剪切
- jquery imgareaselect 使用利用js与程序结合实现图片剪切
- ie6下使用js替换img标签src属性图片不显示的错误