three.js 将图片马赛克化的示例代码


Posted in Javascript onJuly 31, 2020

这篇郭先生来说说BufferGeometry,类型化数组和粒子系统的使用,并且让图片有马赛克效果(同理可以让不清晰的图片清晰化),如图所示

three.js 将图片马赛克化的示例代码

1. 解析图片

解析图片和上一篇一样

initCanvas() {
  canvas = document.createElement('canvas');
  content = canvas.getContext('2d');
  canvas.width = 1600;
  canvas.height = 1200;
  img = new Image();
  img.crossOrigin = '*';
  img.src = "/static/images/base/girl.jpg";
  img.onload = () => {
    content.drawImage(img, 0, 0, canvas.width, canvas.height);
    imgDate = content.getImageData(0, 0, canvas.width, canvas.height);
    this.createPotCloud();  //创建点云
  };
}

2. 操作像素点

createPotCloud() {
  if (points) {
    scene.remove(points)
  }
  let cw = Math.floor(canvas.width / size);
  let ch = Math.floor(canvas.height / size);
  particles = cw * ch;
  geometry = new THREE.BufferGeometry();
  positions = new Float32Array(Math.floor(particles * 3));
  positions_af = new Float32Array(Math.floor(particles * 3));
  var colors = new Float32Array(Math.floor(particles * 3));
  for (var i = 0; i < positions.length; i += 1) {

    positions[3 * i] = - canvas.width / 2 + (i % cw) * size;
    positions[3 * i + 1] = canvas.height / 2 + Math.floor((-1 - i) / cw) * size;
    positions[3 * i + 2] = 0;

    let selectPos = size * (i % cw) + Math.floor(i / cw) * cw * size * size;
    colors[3 * i] = imgDate.data[4 * selectPos] / 255.0;
    colors[3 * i + 1] = imgDate.data[4 * selectPos + 1] / 255.0;
    colors[3 * i + 2] = imgDate.data[4 * selectPos + 2] / 255.0;
  }
  geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));
  geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3))
  geometry.dynamic = true;
  geometry.attributes.position.needsUpdate = true;
  var material = new THREE.PointsMaterial({ size: size, vertexColors: THREE.VertexColors })
  points = new THREE.Points(geometry, material);
  points.name = 'points';
  scene.add(points);
  loaded = true;
},

可以不用纠结代码,核心思想其实我们只需要每隔一定的颜色点取出一个颜色点,然后将这个颜色赋予到geometry的color属性上,就可以了,也可以每隔两行、两列取一个点,但是图片上面的点是一维的,所以需要一些数学方法,

three.js 将图片马赛克化的示例代码

如图所示,原理很简单哦。将不清晰的图片清晰化,就是需要插入更多的像素点,插入的像素点,需要根据已存在的像素点的颜色进行插值,比如原图的像素点1为0xffffff,像素点2的颜色为0xdddddd,则插在两个像素点之间像素点的颜色为0xeeeeee,以此类推。

以上就是three.js 将图片马赛克化的示例代码的详细内容,更多关于three.js 将图片马赛克化的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
pjblog修改技巧汇总
Mar 12 Javascript
javascript Array.sort() 跨浏览器下需要考虑的问题
Dec 07 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
Mar 18 Javascript
JS分页效果示例
Oct 11 Javascript
node.js中的fs.appendFile方法使用说明
Dec 17 Javascript
javascript简单实现类似QQ头像弹出效果的方法
Aug 03 Javascript
javascript实现自动输出文本(打字特效)
Aug 27 Javascript
jQuery的ajax下载blob文件
Jul 21 Javascript
JS遍历页面所有对象属性及实现方法
Aug 01 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
Aug 26 Javascript
微信网页登录逻辑与实现方法
Apr 29 Javascript
在JavaScript中如何使用宏详解
May 06 Javascript
three.js 如何制作魔方
Jul 31 #Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
Jul 31 #Javascript
js实现贪吃蛇小游戏(加墙)
Jul 31 #Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
Jul 31 #Javascript
vue实现给div绑定keyup的enter事件
Jul 31 #Javascript
简单了解JavaScript作用域
Jul 31 #Javascript
基于vue--key值的特殊用处详解
Jul 31 #Javascript
You might like
学习php过程中的一些注意点的总结
2013/10/25 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
原生javascript实现拖动元素示例代码
2014/09/01 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
Three.js基础部分学习
2017/01/08 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
JS表单传值和URL编码转换
2018/03/03 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
Python加速程序运行的方法
2020/07/29 Python
详解pandas赋值失败问题解决
2020/11/29 Python
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
绿化先进工作者事迹材料
2014/01/30 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
影视后期实训报告
2014/11/05 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
士兵突击观后感
2015/06/16 职场文书
如何拟写通知正文?
2019/04/02 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
MySQL添加索引特点及优化问题
2022/07/23 MySQL