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 相关文章推荐
使用TextRange获取输入框中光标的位置的代码
Mar 08 Javascript
Jquery知识点二 jquery下对数组的操作
Jan 15 Javascript
原生js操作checkbox用document.getElementById实现
Oct 12 Javascript
JavaScript利用Date实现简单的倒计时实例
Jan 12 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
Feb 21 Javascript
JavaScript制作简单的框选图表
May 15 Javascript
JavaScript requestAnimationFrame动画详解
Sep 14 Javascript
JavaScript作用域链实例详解
Jan 21 Javascript
微信公众平台 发送模板消息(Java接口开发)
Apr 17 Javascript
layui中的switch开关实现方法
Sep 03 Javascript
BootstrapValidator实现表单验证功能
Nov 08 Javascript
微信小游戏中three.js离屏画布的示例代码
Oct 12 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
如何使用GDB调试PHP程序
2015/12/08 PHP
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
XmlUtils JS操作XML工具类
2009/10/01 Javascript
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
JavaScript类库D
2010/10/24 Javascript
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
2016/08/05 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
javaScript中&quot;==&quot;和&quot;===&quot;的区别详解
2018/03/16 Javascript
vue.js中created方法作用
2018/03/30 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
Python操作MySQL数据库的示例代码
2020/07/13 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
酒店个人培训自我鉴定
2013/12/11 职场文书
生产部厂长职位说明书
2014/03/03 职场文书
工程质量承诺书范文
2014/03/27 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
销售会议开幕词
2016/03/04 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python