伴隨 P5.js 入坑創(chuàng)意編程

上一篇文章:填坑檩小!完結(jié)娛樂圈明星關(guān)系圖譜 發(fā)布后,古柳印象里過往留下的坑貌似只剩下 圖像檢索(一):因緣際會與前瞻 的后續(xù)實踐代碼(原文里給了參考代碼鏈接)和在豆瓣Top250電影海報上的嘗試效果了烟勋。

一想到所有坑都被填了(如果還有啥是我不記得的规求,請千萬不要提醒我),就覺得真是業(yè)界良心卵惦,倍感輕松阻肿。

于是古柳某日點開 圖像檢索(一):因緣際會與前瞻一文,回顧“佳作”之余沮尿,也找了下里面清華美院向帆老師的作品集網(wǎng)站 zeelab Projects丛塌。

PS:如果你沒看過這個演講,推薦一看蛹找,古柳至今難忘:【一席】向帆:如果把每年的春晚都像蚊香一樣卷起來的話姨伤,它就是這樣的

而在這些作品中,古柳更中意且也想實現(xiàn)下類似網(wǎng)頁展示效果的是:AwardPuzzel - zeelab 庸疾。下面援引下“官方”介紹乍楚,建議去網(wǎng)頁體驗一下:

AwardPuzzel 是一個全國美展油畫類獲獎畫作的數(shù)據(jù)視覺化作品,收錄了美展第六屆至第十二屆的2276幅獲獎作品届慈,通過動態(tài)交互的方式呈現(xiàn)了中國油畫30年間的藝術(shù)歷程徒溪、形態(tài)、色彩金顿、尺寸和地區(qū)之間的變化和關(guān)系以及中國油畫大師們的藝術(shù)思路臊泌。
本作品可以被當(dāng)作研究工具為研究者和評論家使用,亦可作藝術(shù)作品欣賞揍拆。
我們希望通過這個平臺分享我們的視角渠概,也希望使用者通過自己的瀏覽和觀察得到自己的結(jié)論。
全國美展是中國美術(shù)界最重要事件嫂拴,每五年舉辦一次播揪,第六屆是1984年舉辦,第十二屆為2014年舉辦筒狠。

雖然古柳不怎么會前端猪狈,但自從接觸爬蟲以來,右鍵“審查元素”辩恼,查看網(wǎng)頁源代碼的習(xí)慣還是有的雇庙。

于是不看不知道谓形,一看又引出了后續(xù)的諸多故事,借用書上的一句話:“那日也是合該有事”疆前,且聽古柳慢慢道來......


點開網(wǎng)頁源代碼后寒跳,找到數(shù)據(jù)展示和交互的區(qū)域?qū)?yīng)的代碼自然是不難的。這里為了展示方便竹椒,特地丟到 Carbon 里冯袍,重點突出下這段代碼。

可以看到 HTML 里主要用了 canvas 標(biāo)簽碾牌,這也沒什么,古柳反正不懂 canvas儡循,睜眼瞎罷了舶吗,也看不出什么名堂。但是卻發(fā)現(xiàn)標(biāo)簽里的 data-processing-soucres 屬性對應(yīng)的 .pde 文件择膝,特別與眾不同誓琼,“聞所未聞,見所未見”肴捉,并且想起當(dāng)初也曾各種搜羅腹侣,希冀能復(fù)現(xiàn)向帆老師的春晚或美展油畫項目,雖不了了之齿穗,但對 processing 這一能實現(xiàn)各種藝術(shù)創(chuàng)意的編程語言有了印象傲隶。

于是谷歌了下 “HTML+Canvas+Processing” 等關(guān)鍵詞,意外地發(fā)現(xiàn):基于 JavaProcessing 語言的家譜中窃页,還有對應(yīng) JavaScriptPython 版本跺株,前者即:P5.js,而這不禁使古柳看到了能在網(wǎng)頁中復(fù)現(xiàn)上述效果的希望脖卖。

說起來乒省,之前古柳壓根一丁點都沒聽說過 P5.js,搜了下對應(yīng)的中文資料也不算多畦木,更偏愛看視頻學(xué)習(xí)的我袖扛,看到萬能的B站上有人搬運了油管上Daniel Shiffman 的教學(xué)視頻(1-12節(jié)),于是立馬刷了下十籍,p5.js 基礎(chǔ)教程 1-7蛆封,并全部跟著敲了遍代碼,雖然無字幕妓雾,但還蠻好啃的娶吞,有很多針對初學(xué)編程的知識講解。(原始鏈接:Code! Programming with p5.js - YouTube

習(xí)得新技能后械姻,立馬用明星關(guān)系圖譜的圖片簡單粗暴的拼了下照片墻妒蛇,雖然離美展油畫的效果差了十萬八千里机断,但也算是賣出了第一步。



其實以前就沒少拼照片墻绣夺,想來大家也都見過爬取微信好友然后拼圖的文章吏奸,但古柳還是安利下這篇舊文,里面的圖片絕對值得一看(如果你看完覺得也不咋地陶耍,那......也就隨它去吧):用python的PIL庫輕松拼接一百張照片奋蔚。

再就是幾天前,看到 @愛可可-愛生活 老師的這則微博:Processing 創(chuàng)作的生成藝術(shù) via:おかず?烈钞,配圖漂亮就不說了泊碑,重點是帶著 Processing 關(guān)鍵詞,于是就埋下了想用 P5.js 實現(xiàn)一波的念頭毯欣。

幸運地找到了作品的出處:Generative Art #146 via:おかず馒过,欣喜地發(fā)現(xiàn)附有 Processing 實現(xiàn)代碼,而且該系列有更多不錯的作品酗钞,遂萌發(fā)了想將其所有作品用 P5.js 實現(xiàn)一波并開源的想法腹忽。

當(dāng)然因為目前 P5.js 不夠熟練,JavaScript / ES6 之類也只是入門砚作,難免有所擔(dān)心和顧慮窘奏。但在復(fù)現(xiàn)這個作品時發(fā)現(xiàn) ProcessingP5.js 真的很像,很多函數(shù)接口官方設(shè)計成統(tǒng)一的葫录,極大降低了門檻着裹。

上圖就是古柳用 P5.js 復(fù)現(xiàn)的效果,雖然還有些小問題米同,代碼也不一定最規(guī)范求冷,但先行分享,后續(xù)再優(yōu)化哈窍霞!可在此網(wǎng)址體驗作品生成效果:https://editor.p5js.org/DesertsX/sketches/GxYHsZg9n

let particles;
const n = 120;

function setup() {
  createCanvas(900, 900);
  // pixelDensity(2);
  colorMode(HSB, 360, 100, 100, 100);
  rectMode(CENTER);
  newParticles();
}

function draw() {
  for (let i in particles) {
    let p = particles[i];
    p.run();
    if (p.isDead()) {
      particles.splice(i, 1);
    }
  }
}

function forms() {
  for (let j = 0; j < n; j++) {
    let x = random(width), y = random(height);
    let s = random(20, 100);
    let hs = s / 2;
    let c = getCol();
    noStroke();
    fill(c);
    if (random(1) > 0.5) {
      for (let i = -s / 2; i < s / 2; i++) {
        particles.push(new Particle(x + i, y - hs, c));
        particles.push(new Particle(x + i, y + hs, c));
        particles.push(new Particle(x - hs, y + i, c));
        particles.push(new Particle(x + hs, y + i, c));
      }
      square(x, y, s);
    } else {
      for (let a = 0; a < TAU; a += TAU / 360) {
        particles.push(new Particle(x + hs * cos(a), y + hs * sin(a), c));
      }
      circle(x, y, s);
    }
  }
}

function newParticles() {
  // particles = new ArrayList<Particle>();
  particles = new Array();
  background("#FCFCF0");
  forms();
  noiseSeed(parseInt(random(100000)));
}

// function mousePressed() {
//   newParticles();
// }

function keyPressed() {
  // 還沒生效
  if (keyCode === 's') {
    saveFrame("123.png");
  }
}

function getCol() {
  let colors = ["#e4572e", "#29335c", "#f3a712", "#a8c686", "#669bbc", "#efc2f0"];
  //let colors = ["#880D1E", "#DD2D4A", "#F26A8D", "#F49CBB", "#CBEEF3"];
  let idx = parseInt(random(colors.length));
  // console.log(idx + colors[idx]);
  return colors[idx];
}

class Particle {
  constructor(x, y, col) {
    this.pos = createVector(x, y);
    this.step = 1;
    this.angle = random(10);
    this.lifeSpan = 100;
    this.noiseScale = 800;
    this.noiseStrength = 90;
    this.col = col;
  }

  show() {
    noStroke();
    // fill(this.col, this.lifeSpan);
    fill(this.col);
    circle(this.pos.x, this.pos.y, 0.5);
  }

  move() {
    this.angle = noise(this.pos.x / this.noiseScale, this.pos.y / this.noiseScale) * this.noiseStrength;
    this.pos.x += cos(this.angle) * this.step;
    this.pos.y += sin(this.angle) * this.step;
    this.lifeSpan -= 0.1;
  }

  isDead() {
    return (this.lifeSpan < 0.0)
  }

  run() {
    this.show();
    this.move();
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匠题,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子但金,更是在濱河造成了極大的恐慌韭山,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冷溃,死亡現(xiàn)場離奇詭異钱磅,居然都是意外死亡,警方通過查閱死者的電腦和手機似枕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門盖淡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凿歼,你說我怎么就攤上這事褪迟∪吆蓿” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵味赃,是天一觀的道長掀抹。 經(jīng)常有香客問我,道長心俗,這世上最難降的妖魔是什么傲武? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮城榛,結(jié)果婚禮上揪利,老公的妹妹穿的比我還像新娘。我一直安慰自己狠持,他們只是感情好土童,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著工坊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敢订。 梳的紋絲不亂的頭發(fā)上王污,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音楚午,去河邊找鬼昭齐。 笑死,一個胖子當(dāng)著我的面吹牛矾柜,可吹牛的內(nèi)容都是我干的阱驾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼怪蔑,長吁一口氣:“原來是場噩夢啊……” “哼里覆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缆瓣,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤喧枷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后弓坞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隧甚,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年渡冻,在試婚紗的時候發(fā)現(xiàn)自己被綠了戚扳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡族吻,死狀恐怖帽借,靈堂內(nèi)的尸體忽然破棺而出珠增,到底是詐尸還是另有隱情,我是刑警寧澤宜雀,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布切平,位于F島的核電站,受9級特大地震影響辐董,放射性物質(zhì)發(fā)生泄漏悴品。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一简烘、第九天 我趴在偏房一處隱蔽的房頂上張望苔严。 院中可真熱鬧,春花似錦孤澎、人聲如沸届氢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽退子。三九已至,卻和暖如春型将,著一層夾襖步出監(jiān)牢的瞬間寂祥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工七兜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丸凭,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓腕铸,卻偏偏與公主長得像惜犀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狠裹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容