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 相关文章推荐
JavaScript的parseInt 进制问题
May 07 Javascript
HTML上传控件取消选择
Mar 06 Javascript
js改变img标签的src属性在IE下没反应的解决方法
Jul 23 Javascript
jQuery层动画定位滑动效果的方法
Apr 30 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
Sep 01 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
Feb 17 Javascript
JavaScript函数中关于valueOf和toString的理解
Jun 14 Javascript
JS判断form内所有表单是否为空的简单实例
Sep 09 Javascript
jQuery.cookie.js使用方法及相关参数解释
Mar 06 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
Sep 30 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
Sep 06 Javascript
Javascript异步执行不按顺序解决方案
Apr 30 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 addslashes 函数详细分析说明
2009/06/23 PHP
php 无法载入mysql扩展
2010/03/12 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
2014/06/06 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
js中利用tagname和id获取元素的方法
2016/01/03 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Python使用chardet判断字符编码
2015/05/09 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
Python实现Dijkstra算法
2018/10/17 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
交通专业个人自荐信格式
2013/09/23 职场文书
个人简历自荐信
2013/12/05 职场文书
入党转预备思想汇报
2014/01/07 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
自强之星事迹材料
2014/05/12 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
人事聘任通知
2015/04/21 职场文书
四群教育工作总结
2015/08/10 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL