99er久久国产精品先锋_亚洲丰满少妇撒尿BBo_老外和中国女人毛片免费视频_思思热在线视频网站_av无码不卡高清_国产 激情 自拍_激情综合色婷婷激情丁香_少妇与子乱A级全毛片_男人捅女人的软件_日本欧美日韩

...

前端小哥玩HTML復(fù)選框上癮,能畫logo做視頻,還開源成JS庫

2021-10-25

量子位報道公眾號 QbitAI

萬萬沒想到,如此普通的復(fù)選框,竟也能玩出這種高度!

例如點一下復(fù)選框,屏幕就像被投入石子的水面泛出波紋:

設(shè)定好初始狀態(tài),就可以開始展示《生命游戲》的演化過程;

控制上下左右,還能還原經(jīng)典游戲《貪吃蛇》;

這就是一位做前端開發(fā)的小哥 Bryan,近期在自己的網(wǎng)站上發(fā)布的有關(guān)checkbox(復(fù)選框)的新玩法。

這個項目在 Hacker News 上引來了大量網(wǎng)友評論。

高贊評論已經(jīng)給小朋友安排得明明白白了~

而面對一些諸如“為什么要用復(fù)選框,普通像素就可以達(dá)到這種效果”的質(zhì)疑,也有人為 Bryan 說話:

回到這件事本身,其實在去年早些時候,他就建了一個名為 Checkboxland 的 JavaScript 庫。

它可以將任何內(nèi)容呈現(xiàn)為 HTML 復(fù)選框。

還有更厲害的玩法

講真,剛才展示的復(fù)選框效果,只能說是“開胃菜”。

不僅僅是簡單的動畫,日常拍下的照片,記錄的生活 vlog,一樣可以成為“復(fù)選框”的素材。

小哥本人也一度以為靈感耗盡,但在參閱了一篇關(guān)于將圖像轉(zhuǎn)化為 ASCII 的文章之后,Bryan 將耐克和蘋果的 logo 轉(zhuǎn)化了出來(不建議轉(zhuǎn)化迪士尼的 logo)。

小哥本人也是老二次元了,《Bad Apple》也是信手拈來:

隨后,自嘲“the CheckBox guy”的小哥賦予了復(fù)選框更多的可能,他又拓展了 Checkboxland API,用來加載任何視頻并生成復(fù)選框版本。

下面這個看起來就像進入了《星際穿越》的五維立方體。

而此刻你如果打開攝像頭,Bryan 還可以帶領(lǐng)你半只腳踏進《黑客帝國》~

趕快學(xué)起來,說不定還能用來畫心形圖,成為你的表白神器(不是)!

復(fù)選框花式玩法,什么原理?

看似炫酷的效果實際制作過程只需分為兩大步,手把手教你!

1. 做出原本的圖像。

2. 將圖像轉(zhuǎn)化為 ASCII 文本輸出。

以水波為例,首先要生成這樣動態(tài)的水波。

想要生成它,需要以中心為原點,在 xy 平面上建立正弦函數(shù)。

z 軸垂直屏幕向外,把z軸的數(shù)值轉(zhuǎn)化為灰度,白色為波峰,黑色為波谷。

然后在圖形計算器 desmos 上讓水波動起來,這樣第一步就完成了。

第二步,將第一步的成果轉(zhuǎn)化為 ASCII 碼輸出。

這一步的轉(zhuǎn)化主要涉及到將彩色對應(yīng)灰度。

采用這個公式,即使是彩色的圖片,也只不過是五彩斑斕的灰罷了~

  • GrayScale = 0.21 R + 0.72 G + 0.07 B

提取原圖的 RGB 色彩,輸出為灰度:

  • const toGrayScale = (r, g, b) => 0.21 * r + 0.72 * g + 0.07 * b;

const convertToGrayScales = (context, width, height) => {

const imageData = 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;:,"^`\'. ';

const rampLength = grayRamp.length;

const getCharacterForGrayScale = grayScale => grayRamp[Math.ceil ((rampLength - 1) * grayScale / 255)];

  • const asciiImage = document.querySelector ('pre#ascii');

const drawAscii = (grayScales) => {

const ascii = grayScales.reduce ((asciiImage, grayScale) => {

return asciiImage + getCharacterForGrayScale (grayScale);

}, '');

asciiImage.textContent = ascii;

最后調(diào)整一下圖片大小就大功告成了~更多詳細(xì)內(nèi)容見文后鏈接~

在線可玩,快來試試

在最近的更新中,Bryan 稱,他創(chuàng)造新天地的事情將暫時告一段落。

但是他不僅留下了復(fù)選框新玩法原理的詳細(xì)介紹,還有自制的豐富的 demos。這些足以讓你探索創(chuàng)造。

簡單的動畫,貪吃蛇,通過攝像頭實時生成復(fù)選框版圖像(demos 中的 webcam)…

點擊即可試玩,以貪吃蛇和 webcam 為例:

點擊 snake,鍵盤上下左右即可控制貪吃蛇:

點擊 webcam,打開前置攝像頭,可以看到自己的實時動態(tài):

根據(jù)網(wǎng)友的反饋,似乎在安卓系統(tǒng)中打開會白屏,但是在 Mac Safari, iPhone Safari, 桌面 Chrome 上都可以使用。

感興趣的小伙伴,快來試試吧~

[1]https://www.bryanbraun.com/2021/09/21/i-keep-making-things-out-of-checkboxes/

[2]https://news.ycombinator.com/item?id=28826018

[3]https://www.jonathan-petitcolas.com/2017/12/28/converting-image-to-ascii-art.html

[4]https://www.bryanbraun.com/checkboxland/#demos

[5]https://github.com/bryanbraun/checkboxland


來源:凹非寺