网络应用|前端小哥玩HTML复选框上瘾:能画logo做视频还开源成JS库( 二 )
文章图片
而此刻你如果打开摄像头 , Bryan还可以带领你半只脚踏进《黑客帝国》~
文章图片
赶快学起来 , 说不定还能用来画心形图 , 成为你的表白神器(不是)!
复选框花式玩法 , 什么原理?
看似炫酷的效果实际制作过程只需分为两大步 , 手把手教你!
1.做出原本的图像 。
2.将图像转化为ASCII文本输出 。
以水波为例 , 首先要生成这样动态的水波 。
文章图片
想要生成它 , 需要以中心为原点 , 在xy平面上建立正弦函数 。
z轴垂直屏幕向外 , 把z轴的数值转化为灰度 , 白色为波峰 , 黑色为波谷 。
文章图片
然后在图形计算器desmos上让水波动起来 , 这样第一步就完成了 。
文章图片
第二步 , 将第一步的成果转化为ASCII码输出 。
这一步的转化主要涉及到将彩色对应灰度 。
采用这个公式 , 即使是彩色的图片 , 也只不过是五彩斑斓的灰罢了~
提取原图的RGB色彩 , 输出为灰度:
- GrayScale = 0.21 R + 0.72 G + 0.07 B
然后为每个像素赋灰度值:
- const toGrayScale = (r, g, b) => 0.21 * r + 0.72 * g + 0.07 * b;
const convertToGrayScales = (context, width, height) => {
const imageData = https://www.cnbeta.com/articles/tech/context.getImageData(0, 0, width, height);
const grayScales = [];
for (let i = 0 ; i < imageData.data.length ; i += 4) {
const r = imageData.data[i];
const g = imageData.data[i + 1];
const b = imageData.data[i + 2];
const grayScale = toGrayScale(r, g, b);
imageData.data[i] = imageData.data[i + 1] = imageData.data[i + 2] = grayScale;
grayScales.push(grayScale);
context.putImageData(imageData, 0, 0);
return grayScales;
- const grayRamp = '$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`\'. ';
推荐阅读
- 耳机|饿了么内测“智能头盔”,外卖小哥送餐能更安全吗?
- 网络应用|免费、不限速 8大网盘今年都已提供无差别速率服务
- 视点·观察|一月两起:外卖小哥遭辱骂,孰之过?
- 网络应用|隐私搜索引擎DuckDuckGo在2021年迎来46%增长
- 网络应用|对比完八家网盘之后 我想说还是QQ好用
- 网络应用|Opera宣布将集成Polygon以太坊扩展平台 以支持Web3去中心化应用
- 网络应用|Opera引入“粘贴保护”功能:保护剪贴板数据安全
- 网络应用|Vivaldi推出车载版浏览器 Polestar 2率先搭载
- 网络应用|多家网盘公司完成“无差别速率”服务改造
- 网络应用|Opera GX浏览器开始在Windows 11微软商店分发
