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 相关文章推荐
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
Feb 14 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
Dec 29 Javascript
javascript动态创建表格及添加数据实例详解
May 13 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
Sep 07 Javascript
javascript实现移动端上的触屏拖拽功能
Mar 04 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
mongoose中利用populate处理嵌套的方法
May 26 Javascript
详解http访问解析流程原理
Oct 18 Javascript
webpack4 处理CSS的方法示例
Sep 03 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
Sep 26 Javascript
使用JS获取页面上的所有标签
Oct 18 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
May 09 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 删除无限级目录与文件代码共享
2008/11/22 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
javascript关于继承的用法汇总
2014/12/20 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
JS设计模式之数据访问对象模式的实例讲解
2017/09/30 Javascript
webpack构建的详细流程探底
2018/01/08 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
JavaScript实现动态生成表格
2020/08/02 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
python 删除非空文件夹的实例
2018/04/26 Python
python实现微信小程序自动回复
2018/09/10 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
有机童装:Toby Tiger
2018/05/23 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
教师年终个人自我评价
2013/10/04 职场文书
女大学生自我鉴定
2013/12/09 职场文书
高中军训的心得体会
2014/09/01 职场文书
基层党员对照检查材料
2014/09/24 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书
python保存图片的四个常用方法
2022/02/28 Python
Java版 简易五子棋小游戏
2022/05/04 Java/Android