这篇郭先生来说说BufferGeometry,类型化数组和粒子系统的使用,并且让图片有马赛克效果(同理可以让不清晰的图片清晰化),如图所示。在线案例点击博客原文

1. 解析图片

解析图片和上一篇一样

  1. initCanvas() {
  2. canvas = document.createElement('canvas');
  3. content = canvas.getContext('2d');
  4. canvas.width = 1600;
  5. canvas.height = 1200;
  6. img = new Image();
  7. img.crossOrigin = '*';
  8. img.src = "/static/images/base/girl.jpg";
  9. img.onload = () => {
  10. content.drawImage(img, 0, 0, canvas.width, canvas.height);
  11. imgDate = content.getImageData(0, 0, canvas.width, canvas.height);
  12. this.createPotCloud(); //创建点云
  13. };
  14. }

2. 操作像素点

  1. createPotCloud() {
  2. if (points) {
  3. scene.remove(points)
  4. }
  5. let cw = Math.floor(canvas.width / size);
  6. let ch = Math.floor(canvas.height / size);
  7. particles = cw * ch;
  8. geometry = new THREE.BufferGeometry();
  9. positions = new Float32Array(Math.floor(particles * 3));
  10. positions_af = new Float32Array(Math.floor(particles * 3));
  11. var colors = new Float32Array(Math.floor(particles * 3));
  12. for (var i = 0; i < positions.length; i += 1) {
  13.  
  14. positions[3 * i] = - canvas.width / 2 + (i % cw) * size;
  15. positions[3 * i + 1] = canvas.height / 2 + Math.floor((-1 - i) / cw) * size;
  16. positions[3 * i + 2] = 0;
  17.  
  18. let selectPos = size * (i % cw) + Math.floor(i / cw) * cw * size * size;
  19. colors[3 * i] = imgDate.data[4 * selectPos] / 255.0;
  20. colors[3 * i + 1] = imgDate.data[4 * selectPos + 1] / 255.0;
  21. colors[3 * i + 2] = imgDate.data[4 * selectPos + 2] / 255.0;
  22. }
  23. geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));
  24. geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3))
  25. geometry.dynamic = true;
  26. geometry.attributes.position.needsUpdate = true;
  27. var material = new THREE.PointsMaterial({ size: size, vertexColors: THREE.VertexColors })
  28. points = new THREE.Points(geometry, material);
  29. points.name = 'points';
  30. scene.add(points);
  31. loaded = true;
  32. },

可以不用纠结代码,核心思想其实我们只需要每隔一定的颜色点取出一个颜色点,然后将这个颜色赋予到geometry的color属性上,就可以了,也可以每隔两行、两列取一个点,但是图片上面的点是一维的,所以需要一些数学方法,

如图所示,原理很简单哦。将不清晰的图片清晰化,就是需要插入更多的像素点,插入的像素点,需要根据已存在的像素点的颜色进行插值,比如原图的像素点1为0xffffff,像素点2的颜色为0xdddddd,则插在两个像素点之间像素点的颜色为0xeeeeee,以此类推。

转载请注明地址:郭先生的博客

three.js 将图片马赛克化的更多相关文章

  1. 巧用 CSS 把图片马赛克化

    一.image-rendering 介绍 CSS 中有一个有趣的特性叫 image-rendering,它可以通过算法来更好地显示被缩放的图片. 假设我们有一张尺寸较小的二维码截图(下方左),将其放大 ...

  2. java处理图片--图片的缩放,旋转和马赛克化

    这是我自己结合网上的一些资料封装的java图片处理类,支持图片的缩放,旋转,马赛克化.(转载请注明出处:http://blog.csdn.net/u012116457) 不多说,上代码: packag ...

  3. 基于HTML5 Canvas实现的图片马赛克模糊特效

    效果请点击下面网址: http://hovertree.com/texiao/html5/1.htm 一.开门见山受美国肖像画家Chuck Close的启发,此脚本通过使用HTML5 canvas元素 ...

  4. HTML5_canvas_像素操作_图片马赛克_图片反相

    canvas 像素操作 像素,即像素点,一个像素只有一个颜色 100*100 的 px 的屏幕区域有 100*100*4 个像素点,即 width*height*4 rgba(0, 0, 0, 1); ...

  5. asp.net MVC发布iis无法加载css,js和图片

    今天真够郁闷的,遇到了在本地能运行的项目到了iis服务器那里就不行了,无法加载css,js和图片,这里说清楚一下先,关于asp.net 的MVC中这样的情况其实不少,但是之前遇到的是在visual s ...

  6. js简单 图片版时钟,带翻转效果

    js简单 图片版时钟,带翻转效果 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...

  7. JS实现图片预加载无需等待

    网站开发时经常需要在某个页面需要实现对大量图片的浏览;用javascript来实现一个图片浏览器,让用户无需等待过长的时间就能看到其他图片 网站开发时经常需要在某个页面需要实现对大量图片的浏览,如果考 ...

  8. js压缩图片base64长度

    var myCanvas=$('.img-container > img').cropper('getCroppedCanvas'); (function (base64){ var image ...

  9. Atitit 图像处理 灰度图片 灰度化的原理与实现

    Atitit 图像处理 灰度图片 灰度化的原理与实现 24位彩色图与8位灰度图 首先要先介绍一下24位彩色图像,在一个24位彩色图像中,每个像素由三个字节表示,通常表示为RGB.通常,许多24位彩色图 ...

随机推荐

  1. excel如何快速汇总多个类别的总和?

    这个需求是一位在当前抗疫一线的朋友提出的,和各位分享一下. 需求情况 因为众所周知的原因,他每天都需要为照顾的小区居民购买.运送生活物资.小区居民通过表单的形式提交自己每日的需求,最终汇总到一张exc ...

  2. 微信小程序scroll-view

    使用竖向滚动时,需要给<scroll-view/>一个固定高度,通过 WXSS 设置 height.以下列举一个示例: scroll-top的优先级要高于scroll-into-view的 ...

  3. git提交时报错:Updates were rejected because the tip of your current branch is behind

    有如下3种解决方法: 1.使用强制push的方法:git push -u origin master -f这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候. 2.push前先将远程rep ...

  4. PHP输入流

    PHP输入流php://input,对于这个的官方解释是: php://input可以读取没有处理过的POST数据.相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要 ...

  5. maven在windows10系统下安装配置和打包war

    maven下载地址:http://maven.apache.org/ 下载完成解压到 D盘 目录下D:\apache-maven-3.5.0\bin 配置maven环境变量: M2_HOME   D: ...

  6. sublime清空控制台

    解决方法 – 只需运行print('\n'*100)打印100个换行符,您将无法看到任何以前的输出,除非你向上滚动一些距离.

  7. ASP.NET MVC 下拉框的传值的两种方式(第二种方式未完成)

    控制器代码: public ActionResult Index() { List<SelectListItem> sli = new List<SelectListItem> ...

  8. Spring Boot2.x 的Druid连接池配置[附带监控]

    父依赖[Spring Boot 2.1.x版本] <parent> <groupId>org.springframework.boot</groupId> < ...

  9. fastjson到底做错了什么?为什么会被频繁爆出漏洞?

    GitHub 15.8k Star 的Java工程师成神之路,不来了解一下吗! GitHub 15.8k Star 的Java工程师成神之路,真的不来了解一下吗! GitHub 15.8k Star ...

  10. 关于ganymed-ssh2版本262和build210的SCPClient类的区别

    ganymed-ssh2是通过java使用ssh连接服务器的工具库,先上两个版本的pom文件配置: <!--ssh连接linux--> <!-- https://mvnreposit ...