開源協作白板 – 輕量級多用戶實時協作白板系統 – 支持多用戶繪圖、文字編輯、圖片處理

項目概述

Whiteboard 是一個基于 Node.js 的輕量級協作白板/畫板系統,支持多用戶實時協作繪圖、文字編輯、圖片處理等功能。該項目采用現代化的 Web 技術棧,提供直觀的用戶界面和豐富的交互功能。

核心特性

🎨 繪圖功能

  • 多種繪圖工具:畫筆、直線、矩形、圓形、三角形
  • 實時協作:顯示遠程用戶光標和繪圖過程
  • 撤銷/重做:支持每個用戶的獨立操作歷史
  • 快捷鍵支持:完整的鍵盤快捷鍵系統

📱 跨平臺支持

  • 響應式設計:支持 PC、平板和移動設備
  • 觸摸優化:針對觸摸屏設備優化交互體驗
  • 多瀏覽器兼容:支持主流瀏覽器

🔧 高級功能

  • 拖拽上傳:支持圖片和 PDF 文件拖拽上傳
  • 圖片處理:縮放、移動、旋轉圖片
  • 文字編輯:支持文本輸入和便簽功能
  • 保存導出:支持保存為圖片和 JSON 格式
  • WebDAV 集成:支持直接保存到云存儲

技術架構

前端技術棧

// 核心依賴
- Socket.io-client: 實時通信
- Canvas API: 繪圖功能
- jQuery: DOM操作
- FontAwesome: 圖標系統
- Vanilla-picker: 顏色選擇器

后端技術棧

// 服務器架構
- Express.js: Web服務器框架
- Socket.io: WebSocket實時通信
- Formidable: 文件上傳處理
- DOMPurify: XSS防護
- WebDAV: 云存儲集成

重點實現

實時協作核心 – WebSocket 通信

// 前端連接建立
const signaling_socket = io("", { path: subdir + "/ws-api" });signaling_socket.on("connect", function () {console.log("Websocket connected!");// 接收繪圖數據signaling_socket.on("drawToWhiteboard", function (content) {whiteboard.handleEventsAndData(content, true);});// 加入白板signaling_socket.emit("joinWhiteboard", {wid: whiteboardId,at: accessToken,windowWidthHeight: { w: $(window).width(), h: $(window).height() },});
});

繪圖引擎核心 – Canvas 操作

// 繪圖狀態管理
const whiteboard = {canvas: null,ctx: null,drawcolor: "black",tool: "mouse",thickness: 4,drawFlag: false,// 繪制路徑drawPath: function (coords, color, thickness, lineCap) {this.ctx.strokeStyle = color;this.ctx.lineWidth = thickness;this.ctx.lineCap = lineCap;this.ctx.beginPath();this.ctx.moveTo(coords[0].x, coords[0].y);for (let i = 1; i < coords.length; i++) {this.ctx.lineTo(coords[i].x, coords[i].y);}this.ctx.stroke();},
};

服務器端處理 – 數據廣播

// 服務器端Socket處理
io.on("connection", function (socket) {socket.on("joinWhiteboard", function (data) {socket.join(data.wid);socket.whiteboardId = data.wid;socket.username = data.username;// 廣播用戶加入信息socket.to(data.wid).emit("userJoined", {username: data.username,socketId: socket.id,});});socket.on("drawToWhiteboard", function (data) {// 廣播繪圖數據給其他用戶socket.to(data.wid).emit("drawToWhiteboard", {coords: data.coords,color: data.color,thickness: data.thickness,tool: data.tool,username: socket.username,});});
});

文件上傳處理

// 文件上傳API
app.post("/api/upload", function (req, res) {const form = new formidable.IncomingForm();form.uploadDir = path.join(__dirname, "..", "public", "uploads");form.parse(req, function (err, fields, files) {if (err) {res.status(500).json({ error: "Upload failed" });return;}// 處理上傳的文件const file = files.file;const safePath = getSafeFilePath(file.filepath);res.json({success: true,filepath: "/uploads/" + path.basename(safePath),});});
});

快捷鍵系統

// 快捷鍵配置
const keybinds = {"ctrl+z": "undo","ctrl+y": "redo","ctrl+s": "saveImage","ctrl+shift+k": "saveJSON","ctrl+p": "penTool","ctrl+e": "eraserTool","ctrl+l": "lineTool","ctrl+r": "rectangleTool","ctrl+c": "circleTool",
};// 快捷鍵處理
keymage(keybinds, function (event, handler) {event.preventDefault();shortcutFunctions[handler]();
});

部署方式

# 安裝依賴
npm install# 生產環境啟動
npm run start:prod# 開發環境啟動
npm run start:dev

項目優勢

  1. 輕量級:核心代碼簡潔,依賴少,啟動快速
  2. 易擴展:模塊化設計,便于功能擴展
  3. 高性能:Canvas 繪圖,實時協作流暢
  4. 跨平臺:支持多種設備和瀏覽器
  5. 開源免費:MIT 許可證,可自由使用和修改

應用場景

  • 在線教育:遠程教學、課堂互動
  • 團隊協作:項目討論、頭腦風暴
  • 設計評審:UI/UX 設計反饋
  • 會議記錄:會議筆記、流程圖繪制
  • 創意工作:草圖繪制、創意表達

技術亮點

  • 實時協作:基于 WebSocket 的低延遲通信
  • 繪圖優化:智能路徑平滑和性能優化
  • 安全防護:XSS 防護和文件上傳安全檢查
  • 用戶體驗:直觀的界面設計和流暢的交互
  • 可定制性:豐富的配置選項和主題支持

項目地址: https://github.com/cracker0dks/whiteboard
在線演示: https://cloud13.de/testwhiteboard/

?開源協作白板 - 輕量級多用戶實時協作白板系統 - 支持多用戶繪圖、文字編輯、圖片處理 - 高質量源碼分享平臺-免費下載各類網站源碼與模板及前沿技術分享

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920893.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920893.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920893.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spark自定義累加器實現高效WordCount

目錄 1. 代碼功能概述 2. 代碼逐段解析 主程序邏輯 自定義累加器 MyAccumulator 3. Spark累加器原理 累加器的作用 AccumulatorV2 vs AccumulatorV1 累加器執行流程 4. 代碼擴展與優化建議 支持多詞統計 線程安全優化 使用內置累加器 5. Spark累加器的適用場景 6…

開源 | 推薦一套企業級開源AI人工智能訓練推理平臺(數算島):完整代碼包含多租戶、分布式訓練、模型市場、多框架支持、邊緣端適配、云邊協同協議:

&#x1f525; Github 主倉庫&#xff08;優先更新&#xff09;https://github.com/roinli/SSD-GPU-POOL | Gitee 鏡像倉庫 > 原倉庫因故暫停使用&#xff0c;本倉庫為鏡像項目。開源版本將持續迭代優化&#xff0c;歡迎提交 Issue 或加入社群交流。 GPU 池化平臺 | AI 全…

pprint:美觀打印數據結構

文章目錄一、pprint.pprint()&#xff1a;美觀化打印二、pprint.pformat()&#xff1a;格式化成字符串表示三、pprint() 處理包含__repr__() 方法的類四、遞歸引用&#xff1a;Recursion on {typename} with id{number}五、depth 參數控制 pprint() 方法的輸出深度六、width 參…

解決Docker運行hello-world鏡像報錯問題

解決Docker運行hello-world鏡像報錯問題當您運行sudo docker run hello-world命令時出現"Unable to find image hello-world locally"和"context deadline exceeded"錯誤&#xff0c;這通常是由于Docker無法從默認鏡像倉庫下載鏡像導致的。以下是幾種解決方…

一體化步進伺服電機在汽車線束焊接設備中的應用案例

在汽車制造領域&#xff0c;線束焊接是確保電氣系統可靠性的關鍵工藝。為解決傳統焊接設備限位精度不足、運行穩定性差等問題&#xff0c;采用?STM42系列一體化步進伺服電機?&#xff0c;通過位置模式與原點回歸功能的優化配置&#xff0c;顯著提升了焊接設備的定位精度與抗干…

【Django】首次創建Django項目初始化

1. 創建虛擬環境例如創建虛擬環境為rebortpython3.6 -m venv test/rebort2. 安裝Djangosudo -i cd test/rebort/bin/ source ./activate pip install Django如果是在wingows上安裝&#xff0c;同時適用默認安裝會&#xff0c;會在python的安裝目前下生成了兩個文件在lib目錄下會…

Spark引擎中RDD的性質

RDD&#xff08;Resilient Distributed Dataset&#xff0c;彈性分布式數據集&#xff09;是SparkCore提供的核心抽象。一個RDD在邏輯上抽象地代表了一個HDFS文件或數據庫中的表&#xff0c;但RDD是被分區的&#xff0c;每個分區分布在不同的節點上&#xff0c;從而并行執行。 …

人工智能學習:什么是NLP自然語言處理

一、什么是自然語言處理 自然語言處理(Natural Language Processing, 簡稱NLP)是計算機科學與語言學中關注于計算機與人類語言間轉換的領域,主要目標是讓機器能夠理解和生成自然語言,這樣人們可以通過語言與計算機進行更自然的互動。 對于自然語言來說,處理的數據…

【Selenium】UI自動化測試框架設計:從項目結構到Base-Page層的最佳實踐

UI自動化測試框架設計&#xff1a;從項目結構到Base-Page層的最佳實踐全面解析UI自動化測試項目的架構設計與實現細節&#xff0c;構建可維護的測試框架在現代軟件開發中&#xff0c;UI自動化測試已成為確保產品質量的重要環節。一個良好的項目結構和合理的設計模式能夠顯著提高…

QT項目文件(.pro)指南

概述Qt項目文件&#xff08;.pro文件&#xff09;是Qt開發的核心配置文件&#xff0c;它使用qmake工具來管理項目的構建過程。一個良好組織的.pro文件不僅能確保項目正確編譯&#xff0c;還能大大提高代碼的可維護性和團隊協作效率。本文將深入探討.pro文件的結構、語法和最佳實…

Scikit-learn Python機器學習 - 機器學習開發流程

鋒哥原創的Scikit-learn Python機器學習視頻教程&#xff1a; 2026版 Scikit-learn Python機器學習 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 課程介紹 本課程主要講解基于Scikit-learn的Python機器學習知識&#xff0c;包括機器學習概述&#xff0c;特征工程(數據…

基于Spring Cloud Sleuth與Zipkin的分布式鏈路追蹤實戰指南

基于Spring Cloud Sleuth與Zipkin的分布式鏈路追蹤實戰指南 隨著微服務架構的普及&#xff0c;服務間調用鏈條變得越來越復雜。在生產環境中&#xff0c;定位跨服務調用的性能瓶頸、故障根因&#xff0c;往往需要分布式鏈路追蹤能力。本文結合Spring Cloud Sleuth與Zipkin&…

Coze源碼分析-工作空間-項目開發-后端源碼

前言 本文將深入分析Coze Studio項目中用戶登錄后點擊"項目開發"功能的后端實現&#xff0c;通過源碼解讀來理解整個智能體項目管理系統的架構設計和技術實現。 項目架構概覽 整體架構設計 Coze Studio后端采用了經典的分層架構模式&#xff0c;將項目開發功能劃分為…

單片機元件學習

DS18B20溫度傳感器51&#xff08;stc8h8k64u&#xff09;簡介ds18B20是使用單總線的元器件代碼/*--------------------------------------------------------------------- */ /* ------------------------ For STC8H MCU ----------------------------- */ /* --- Web: www.…

Spring事務管理策略對比與性能優化實踐指南

Spring事務管理策略對比與性能優化實踐指南 問題背景介紹 在現代企業級應用中&#xff0c;事務管理是保障數據一致性與安全性的核心機制。Spring作為主流的Java企業級開發框架&#xff0c;提供了多種事務管理方案&#xff0c;包括編程式事務、聲明式事務以及與第三方分布式事務…

C++“類吸血鬼幸存者”游戲制作的要點學習

古之學者必有師&#xff0c;對于技術的提升&#xff0c;只靠自己的摸索雖然能得到深刻的經驗&#xff0c;但往往沒有較高的效率。筆者這些天學習了BV1eM4m1S74K“提瓦特幸存者”的C開發&#xff0c;也是實現了該類型游戲的開發。今天&#xff0c;就通過經驗總結&#xff0c;親手…

Python OpenCV圖像處理與深度學習:Python OpenCV圖像分割入門

圖像分割&#xff1a;從基礎到實踐 學習目標 通過本課程&#xff0c;學員們將了解圖像分割的基本概念&#xff0c;掌握使用OpenCV實現圖像分割的方法&#xff0c;包括基于閾值的分割和基于區域的分割技術。同時&#xff0c;學員將能夠獨立完成簡單的圖像分割任務&#xff0c;并…

MQ使用場景分析

異步解耦?系統間通過消息隊列通信&#xff0c;降低耦合度&#xff08;如訂單系統與庫存系統&#xff09;典型場景&#xff1a;電商下單后異步通知物流系統?流量削峰?應對突發流量&#xff0c;將請求暫存到消息隊列逐步處理典型場景&#xff1a;秒殺活動時緩沖高并發請求?數…

人工智能學習:NLP文本處理的基本方法

一、分詞 1、分詞介紹 概念 分詞就是將連續的字序列按照一定的規范重新組合成詞序列的過程。在英文的行文中,單詞之間是以空格作為自然分界符的,而中文只是字、句和段能通過明顯的分界符來簡單劃界,唯獨詞沒有一個形式上的分界符。分詞過程就是找到這樣分界符的過程…

Vue3 中 Proxy 在組件封裝中的妙用

目錄 Vue3 中 Proxy 在組件封裝中的妙用&#xff1a;讓組件交互更優雅 組件封裝中的常見痛點 Proxy 是什么&#xff1f; Proxy 在組件封裝中的應用 基礎組件結構 使用 Proxy 實現方法透傳 代碼解析 父組件中的使用方式 Proxy 的其他應用場景 1. 權限控制 2. 方法調用…