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 相关文章推荐
双击滚屏-常用推荐
Nov 29 Javascript
浅谈javascript六种数据类型以及特殊注意点
Dec 20 Javascript
js纯数字逐一停止显示效果的实现代码
Mar 16 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
Jul 07 Javascript
点击页面任何位置隐藏div的实现方法
Sep 05 Javascript
Vue组件通信之Bus的具体使用
Dec 28 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
Sep 04 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
Dec 09 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
Dec 12 Javascript
js实现移动端吸顶效果
Jan 08 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
Apr 03 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
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知道与问问的采集插件代码
2010/10/12 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
2010/11/16 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
2013/09/16 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
node.js中使用socket.io的方法
2014/12/15 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
浅谈Django REST Framework限速
2017/12/12 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
python Kmeans算法原理深入解析
2019/08/23 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
积极贯彻学习两会精神总结
2014/03/17 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
承诺函格式模板
2015/01/21 职场文书
学校计划生育责任书
2015/05/09 职场文书
入党转正申请报告
2015/05/15 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书