p5.js 開發點彩畫派的繪畫工具

来源:https://www.cnblogs.com/k21vin/archive/2023/11/01/17802223.html
-Advertisement-
Play Games

本文簡介 點贊 + 關註 + 收藏 = 學會了 這幾天在整理書櫃時看到這套書,看到梵高,想起他的點彩畫。 想到點彩畫派,不得不提的一個畫家叫喬治·皮埃爾·秀拉。據說梵高也模仿過他的畫作。 我引用一下維基百科對點彩畫派的解析: 點彩畫派(又稱點描派;英文:Pointillism)是一種用很粗的彩點堆砌 ...


本文簡介

點贊 + 關註 + 收藏 = 學會了


這幾天在整理書櫃時看到這套書,看到梵高,想起他的點彩畫。

file


想到點彩畫派,不得不提的一個畫家叫喬治·皮埃爾·秀拉。據說梵高也模仿過他的畫作。

我引用一下維基百科對點彩畫派的解析:

點彩畫派(又稱點描派;英文:Pointillism)是一種用很粗的彩點堆砌,創造整體形象的油畫繪畫方法。


說簡單點,就是用圓點畫畫,比如秀拉的這幅作品《檢閱》。

file


這種風格除了用在藝術繪畫方面,在眼科醫院體檢的時候也會用到,比如測紅綠色盲。

然後我又繼續想啊想,想到我們用 canvas 好像也能做出一款點彩畫的繪圖工具,但用原生的方式寫是不可能的,因為我懶。思前想後,還是覺得用 p5.js 寫會好點,畢竟這個庫也是個比較知名的藝術庫。


於是查了一下 p5.jsapi ,做了一個簡陋版的工具。樣式方面就靠各位工友動手啦~

file



動手編碼

要實現這個畫版工具主要有以下步驟:

  1. 創建 canvas 畫布。
  2. 創建顏色選擇器。
  3. 創建畫筆寬度控制器。
  4. 需要一個重置畫布的按鈕。
  5. 監聽滑鼠點擊和點擊時移動的位置。
  6. 根據滑鼠點擊和點擊時移動的位置創建圓形。
  7. 點擊重置畫布按鈕將畫布背景設置回白色。

主要工作就是以上幾步,而且這幾步都用了 p5.js 提供的方法去實現。

主要用到的生命周期有 setupdraw,這部分我在 p5.js 光速入門 里有講到。

創建顏色選擇器、滑塊、按鈕分別用了 p5.jscreateColorPicker()createSlider() createButton() 方法。

繪製過程的代碼寫在 draw 周期里,使用了 circle() 方法創建圓形,圓形的坐標就是滑鼠繪畫時的當前坐標,圓形的尺寸是取滑塊的值,圓形的顏色取了顏色選擇器的值。


03

以下是完整代碼,可以結合上面的講解和代碼中的註釋一起理解。

<script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/p5.js"></script>

<script>
  // 顏色選擇器
  let colorPicker
  // 滑塊
  let brushSizeSlider
  // 布爾變數,用於跟蹤是否正在繪製
  let isDrawing = false
  // 筆刷的大小,預設為10
  let brushSize = 10

  function setup() {
    // 創建一個400x400像素大小的畫布
    let canvas = createCanvas(400, 400)
    canvas.style('border', '1px solid #ccc')
    
    // 創建顏色選擇器
    colorPicker = createColorPicker('#ff0000')
    // 設置顏色選擇器的位置
    colorPicker.position(10, height + 10)
    
    // 創建滑塊
    brushSizeSlider = createSlider(1, 50, 10, 1)
    // 設置滑塊位置
    brushSizeSlider.position(120, height + 10)
    
    // 創建按鈕
    let resetButton = createButton('Reset')
    // 設置按鈕位置
    resetButton.position(240, height + 10)
    // 設置按鈕事件
    resetButton.mousePressed(resetCanvas)
    
    background(255)
  }

  function draw() {
    if (isDrawing) {
      let selectedColor = colorPicker.color()
      let selectedSize = brushSizeSlider.value()
      fill(selectedColor)
      noStroke()
      circle(mouseX, mouseY, selectedSize)
    }
  }

  // 當滑鼠按下時
  function mousePressed() {
    isDrawing = true
  }

  // 當滑鼠鬆開時
  function mouseReleased() {
    isDrawing = false
  }

  function resetCanvas() {
    background(255)
  }
</script>

上面的寫法是用 CDN 的方式引入 p5.js,用法上和 npm 下載的 p5.js 是有一丟丟區別的,想瞭解這方面知識可以看看 《p5.js 使用npm安裝p5.js後如何使用?》


同時我還把本文的代碼放到【碼上掘金】了,有興趣的工友自行獲取吧~



推薦閱讀


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 為滿足業務需要,需要為項目中自定義模板添加一個計算欄位的組件,通過設置字元串表達式,使用時在改變表達式其中一個欄位的數據時,自動計算另外一個欄位的值。 本篇為上篇,介紹原理,簡單實現一個工具,輸入字元串表達式,解析其中的參數,輸入參數計算結果。 下篇將基於此封裝實現對Mongo查詢語法的封裝, ...
  • 簡介: 背景:一直以來在項目上經常使用ping指令來測試網路通信,最近稍微研究了一下常用的指令,記錄以作備忘。--MaQaQ 2023-11-1 ping (Packet Internet Groper)是一種網際網路包探索器,用於測試網路連接量的程式 。Ping是工作在 TCP/IP網路體繫結構中應 ...
  • 根據北京研精畢智信息咨詢發佈的調查報告,2018-2021年,全球數據存儲量由30ZB上升至55ZB左右,年平均增長率約為27.8%。到2022年,數據總存儲量進一步增加至65ZB以上,較2021年同期新增了約10ZB,同比增長18.2%。各市場主體對數據的重視程度不斷提升,數據應用逐步由批量處理向 ...
  • HarmonyOS 提供了強大的 UI 開發工具和組件,使開發者能夠創建吸引人的用戶界面。本章將詳細介紹在 HarmonyOS 中應用 JS、CSS、HTML,HarmonyOS 的 UI 組件以及如何自定義 UI 組件。 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 介紹 有朋友反饋說最近分享的內容不太好理解,那麼今天來分享個早前開發的圖層製作過程,基於GIS數據代碼生成流動的車行線,上手很簡單。下麵我將在實現思路、具體開發、數據來源這幾方面逐步講解,希望讀者能從中獲取對數據可視化開發的興趣。文中使用 ...
  • watch的數據源 watch函數的第一個參數是監聽的數據源,可以是: ref和computed創建的響應式數據; reactive創建的響應式對象; getter函數; 多個數據源組成的數組; 註: 響應式對象的屬性需要使用getter監聽。 當數據源是響應式對象時,其屬性的變更會觸發回調函數,但 ...
  • //template中 <img :src="boxHerf" /> //js let boxHerf = ref('/src/assets/images/contain.svg') 上述寫法本地能夠正常訪問圖片,但是打包之後無法正常訪問,將 boxHerf 換成下列寫法即可解決 let boxHe ...
  • 一、if語句的分支 分類:單分支,雙分支,多分支,分支嵌套 ()中可以是一個值,也可以是一個表達式 // 單分支 if (條件表達式){ 代碼段 } // 雙分支 if (條件表達式) { 代碼段1 }else { 代碼段2 } // 多分支 if (條件表達式1){ 代碼段1 } else if ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...