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

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属性上,就可以了,也可以每隔两行、两列取一个点,但是图片上面的点是一维的,所以需要一些数学方法,

如图所示,原理很简单哦。将不清晰的图片清晰化,就是需要插入更多的像素点,插入的像素点,需要根据已存在的像素点的颜色进行插值,比如原图的像素点1为0xffffff,像素点2的颜色为0xdddddd,则插在两个像素点之间像素点的颜色为0xeeeeee,以此类推。
转载请注明地址:郭先生的博客
three.js 将图片马赛克化的更多相关文章
- 巧用 CSS 把图片马赛克化
一.image-rendering 介绍 CSS 中有一个有趣的特性叫 image-rendering,它可以通过算法来更好地显示被缩放的图片. 假设我们有一张尺寸较小的二维码截图(下方左),将其放大 ...
- java处理图片--图片的缩放,旋转和马赛克化
这是我自己结合网上的一些资料封装的java图片处理类,支持图片的缩放,旋转,马赛克化.(转载请注明出处:http://blog.csdn.net/u012116457) 不多说,上代码: packag ...
- 基于HTML5 Canvas实现的图片马赛克模糊特效
效果请点击下面网址: http://hovertree.com/texiao/html5/1.htm 一.开门见山受美国肖像画家Chuck Close的启发,此脚本通过使用HTML5 canvas元素 ...
- HTML5_canvas_像素操作_图片马赛克_图片反相
canvas 像素操作 像素,即像素点,一个像素只有一个颜色 100*100 的 px 的屏幕区域有 100*100*4 个像素点,即 width*height*4 rgba(0, 0, 0, 1); ...
- asp.net MVC发布iis无法加载css,js和图片
今天真够郁闷的,遇到了在本地能运行的项目到了iis服务器那里就不行了,无法加载css,js和图片,这里说清楚一下先,关于asp.net 的MVC中这样的情况其实不少,但是之前遇到的是在visual s ...
- js简单 图片版时钟,带翻转效果
js简单 图片版时钟,带翻转效果 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- JS实现图片预加载无需等待
网站开发时经常需要在某个页面需要实现对大量图片的浏览;用javascript来实现一个图片浏览器,让用户无需等待过长的时间就能看到其他图片 网站开发时经常需要在某个页面需要实现对大量图片的浏览,如果考 ...
- js压缩图片base64长度
var myCanvas=$('.img-container > img').cropper('getCroppedCanvas'); (function (base64){ var image ...
- Atitit 图像处理 灰度图片 灰度化的原理与实现
Atitit 图像处理 灰度图片 灰度化的原理与实现 24位彩色图与8位灰度图 首先要先介绍一下24位彩色图像,在一个24位彩色图像中,每个像素由三个字节表示,通常表示为RGB.通常,许多24位彩色图 ...
随机推荐
- C/C++语言的学习方向
这个世界上有太多的坑,如果我们不具备查阅资料的能力和对现实世界的思考能力,入坑是大概率的事情. C/C++语言能做什么?C/C++程序员在做什么?企业需要什么样的C/C++程序员?对初学者来说,要搞清 ...
- Charles的介绍,配置与使用
简介 Charles中文名叫青花瓷 它是一款基于HTTP协议的代理服务器 通过成为客户端或者浏览器的代理 然后截取请求和请求结果达到分析抓包的目的. 特点 跨平台 win linux mac 半免费 ...
- mysql 出现You can't specify target table for update in FROM clause错误的解决方法
mysql出现You can’t specify target table for update in FROM clause 这个错误的意思是不能在同一个sql语句中,先select同一个表的某些值 ...
- Python之浅谈基础
执行python的两种方式 交互式(jupyter) 通过cmd或jupyter运行python代码 优点:运行一句执行一句 缺点:关闭cmd或jupyter后数据消失 命令行式(pycharm) 优 ...
- 半导体质量管理(LineWorks)_SPACE(统计过程分析和控制环境)
LineWorks作为SEMI的质量管理,可为半导体制造商提供对实施标准,产品质量,质量和指标验证的全面控制.有许多附加模块和SPACE-Chart插件,可根据个人需求进行灵活调整. 三个主要特征是: ...
- Git超详细用法,通俗易懂
创建本地仓库 和 远端共享仓库 直接下载安装包:Git下载地址 安装 git,查看 git 版本,git version 配置项目的 git 账号 git config --global user.n ...
- return 关键字
return关键字:1.使用范围:使用在方法体中2.作用: ① 结束方法 ② 针对于返回值类型的方法,使用"return 数据"方法返回所要的数据.3.注意点:return关键字后 ...
- CSS让一个图片显示在另一个图片上面
思路,在两个图片的父元素上设置 position:relative , 然后给小图片设置 position:absolute ,位置通过top,bottom,left,right来修改,然后用 ...
- Shein一面(视频面)07.07
应聘职位:Java工程师 时长:30min 面经: Spring讲一下 SpringAOP用到什么设计模式 JVM包括什么 运行时数据区包括什么 什么时候入栈,出栈 Sychronized和可重入锁区 ...
- WPF DataGrid ScrollBar Style
效果图如下 代码 <DataGrid.Resources> <Style TargetType="{x:Type ScrollBar}"> <Sett ...