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 相关文章推荐
jquery实现textarea输入字符控制(仿微博输入控制字符)
Apr 26 Javascript
js创建对象的方法汇总
Jan 07 Javascript
js实现异步循环实现代码
Feb 16 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
May 10 Javascript
Bootstrap3制作图片轮播效果
May 12 Javascript
微信小程序 解决swiper不显示图片的方法
Jan 04 Javascript
Angular之指令Directive用法详解
Mar 01 Javascript
JS异步加载的三种实现方式
Mar 16 Javascript
Vue多种方法实现表头和首列固定的示例代码
Feb 02 Javascript
JavaScript中字符串的常用操作方法及特殊字符
Mar 18 Javascript
基于rollup的组件库打包体积优化小结
Jun 18 Javascript
JS removeAttribute()方法实现删除元素的某个属性
Jan 11 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连接mssql:pdo odbc sql server
2011/07/20 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
js 金额格式化来回转换示例
2014/02/23 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
javascript实现实时输出当前的时间
2015/04/27 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
2015/08/07 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
Three.js基础部分学习
2017/01/08 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
python3制作捧腹网段子页爬虫
2017/02/12 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
python采集微信公众号文章
2018/12/20 Python
基于django channel实现websocket的聊天室的方法示例
2019/04/11 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
python zip()函数的使用示例
2020/09/23 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
十佳美德少年事迹材料
2014/02/05 职场文书
租房合同协议书
2014/04/09 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
司考复习计划
2015/01/19 职场文书
求职自我评价怎么写
2015/03/09 职场文书
青年教师听课心得体会
2016/01/15 职场文书
五年级数学教学反思
2016/02/16 职场文书
golang中的空slice案例
2021/04/27 Golang
Python基础之元类详解
2021/04/29 Python
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android