【騰訊云 Cloud Studio 實戰訓練營】在線 IDE 編寫 canvas 轉換黑白風格頭像

關于 Cloud Studio

Cloud Studio 是基于瀏覽器的集成式開發環境(IDE),為開發者提供了一個永不間斷的云端工作站。用戶在使用Cloud Studio 時無需安裝,隨時隨地打開瀏覽器就能在線編程。
Cloud Studio 作為在線IDE,包含代碼高亮、自動補全、Git集成、終端等IDE 的基礎功能,同時支持實時調試、插件擴展等,可以幫助開發者快速完成各種應用的開發、編譯與部署工作。

IDE(Integrated Development Environment ) 作為碼農生產力的重要組成部分,相信很多伙伴都用過不少相關的產品。那么不用下載和安裝的 IDE,你之前有體驗過嗎?

本篇博文將從作者參與 Cloud Studio 實戰訓練營的親身體會出發,帶領你一步步揭開Cloud Studio 的神秘面紗。

第一步:注冊

點開這里,先去右上角注冊。
在這里插入圖片描述

如果大家有 github 的賬號,那么我推薦你使用 github 來注冊,這樣你編寫好的代碼可以一鍵保存到 github 上。
如果沒有 github 賬號,可以先去注冊“CODING DevOps”,然后使用“CODING DevOps”賬號登錄。

第二步:創建自己的工作空間

登錄好以后,先點擊左下角新建工作空間。

在這里插入圖片描述
在跳轉的頁面中,可以配置你的項目將要托管到哪個服務商,這里支持 coding 和 github

在這里插入圖片描述
因為最開始推薦大家使用 github 登錄,所以這里選擇 github,就會自動同步github 中的團隊和項目

在這里插入圖片描述
是不是很方便。

當然, Cloud Studio 提供了茫茫多的模板,我們可以不創建工作空間,而是從中選擇自己熟練的技術棧打開也可以的。

在這里插入圖片描述

這里需要注意一點,通過空間模版創建的項目,默認沒有連接 git 倉庫。
所以,你要自己手動執行 git initgit remote add origin <address>git add .git commit 以及git push等操作。

選擇模板以后,項目會自動運行起來,第一步是配置運行環境,這一點和本地的 IDE 有明顯的區別。

在這里插入圖片描述
等環境跑完了,你就能得到一個在瀏覽器中運行的 vscode (ps: 笑臉)

在這里插入圖片描述
當然這也可以理解,畢竟 cloud studio 主打一個在線編輯,所以采用什么外觀無非套殼子,沒必要重復造車輪對吧。

第三步:編寫實戰訓練代碼

老規矩哈,先體驗一把:搗蛋鬼向你推送了體驗地址

在這里插入圖片描述

這個小 demo 主要實現了兩個功能:

  1. 上傳頭像
  2. 將上傳的頭像通過 canvas 重繪為黑白風格并付給 a 鏈接,這樣用戶就可以點擊下載

整體實現的邏輯并不復雜,核心的邏輯大概是這樣:

  1. 通過設置 input 的屬性 type 為 file,來獲取上傳的頭像
  2. 繪制一個靜態的 canvas 到頁面上,用來當作畫布
  3. 使用 canvas 的 drawImage 方法將獲取的頭像繪制到畫布上
  4. 使用 canvas 的 getImageData 方法獲取畫布中頭像圖片的像素
  5. 遍歷得到的所有的像素,計算每個像素的灰度值
  6. 根據得到的灰度值大小,將每個像素點的 rgb 設置為 0 或者 255
  7. 將轉換后的像素點通過 putImageData 方法重新繪制到畫布上
  8. 通過 canavs 的 toDataURL 方法將圖片轉換為 base64 的字符串
  9. 將 base64 字符串賦值給攜帶 download 屬性的 a 標簽,從而實現點擊下載

現在我們已經初步知道了實現的邏輯,那就開始編寫代碼吧。

配置 App.vue
<script setup>
import { onMounted } from 'vue';onMounted(()=>{// 獲取元素var canvas = document.getElementById('canvas');var ctx = canvas.getContext('2d');var uploadBtn = document.getElementById('uploadBtn');// 監聽文件上傳事件uploadBtn.addEventListener('change', function(e) {var file = e.target.files[0];// 創建圖像對象var img = new Image();img.onload = function() {// 將圖像繪制到畫布上ctx.drawImage(img, 0, 0, canvas.width, canvas.height);// 應用卡通效果applyCartoonEffect();};img.src = URL.createObjectURL(file);});// 應用卡通效果function applyCartoonEffect() {// 獲取畫布的像素數據var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);var data = imageData.data;// 遍歷每個像素點for (var i = 0; i < data.length; i += 4) {// 獲取像素點的RGB值var r = data[i];var g = data[i + 1];var b = data[i + 2];// 計算灰度值var gray = (r + g + b) / 3;// 將像素點轉換為卡通效果,即將灰度值處理為0或255if (gray < 128) {data[i] = data[i + 1] = data[i + 2] = 0; // 設置為黑色} else {data[i] = data[i + 1] = data[i + 2] = 255; // 設置為白色}}// 將處理后的像素數據重新繪制到畫布上ctx.putImageData(imageData, 0, 0);var downloadLink = document.getElementById('downloadLink');downloadLink.href = canvas.toDataURL(); // 默認為PNG格式}
})</script><template><main><div class="wrapper"><input type="file" id="uploadBtn" accept="image/*"><a id="downloadLink" href="#" download="cartoon_avatar.png">下載</a></div><canvas id="canvas" width="300" height="300"></canvas></main>
</template><style scoped>
canvas {border: 1px solid #000;
}
.wrapper{width: 300px;
}
</style>

寫完后就可以在右邊的預覽中實驗效果,這樣一個有趣的小 demo 就實現了。

最后,點擊右側的源代碼管理,就可以提交代碼,然后把代碼上傳到 github ,大功告成 。

在這里插入圖片描述

項目地址

👉 https://github.com/qingtiantongxie/vue3-canvas

歡迎各路英雄好漢積極提出意見和問題。

訓練營實戰總結

優點與未來

不得不承認,對于開發而言,cloud studio 簡直就是生產力大解放。

  1. 程序員可以通過瀏覽器訪問和開發項目,無需在本地設置開發環境,這樣就能省去70%的煩惱。回家加班的時候你再也不用背著沉重的電腦,放假遠游的時候也不必擔心項目出問題不能調試。
  2. 筆記本不再是編程的局限,雖然很多人也在使用諸如 ipad 等,但是,當編輯器,node環境,python版本,數據庫,redis等等等等不再成為你的困擾,大膽想象,或許某天,在午后的陽光下,坐在軟軟的沙發上,手機+投屏就可以輕松完成日常的開發任務,簡直美到飛起。
  3. 對于后端而言,所見即所得。cloud studio 可以輕松構建、測試和部署應用程序,開發的生產環境和部署的線上環境無縫銜接,還需要擔心環境問題導致的部署失敗嗎?
  4. 團隊模式簡直是太香了。以往的團隊開發都體現在 gitlab、tapd、apiFox 等等實際上跟開發的工作本身一點關系都沒有的工具上,而開發工具,從來不知道團隊為何物。而線上IDE最大的優點,就是實現了團隊共享。你看所有的團隊概念的東西,都部署在線上。同一團隊的開發者們可以共享代碼、調試問題,并在代碼上進行實時注釋和反饋,提升團隊的工作效率和溝通效果。
  5. 完美解決了 IDE 版本與系統不兼容的問題。
  6. 對于初學編程的人而言,cloud studio 更是一大福音,跨設備跨地點跨空間的特性,可以極大提升學習的效率,而且cloud studio 的自動構建開發環境,自動檢測和生成開發環境可以在學習編程或更換編輯器時減少大量時間成本。

總之一句話,雖然在線 IDE 炒了許多年,但我覺得 cloud studio 才是那“在月亮上邁出的第一步”。

不足和擔憂

金無足赤人無完人,任何一款好的產品想要真正成熟,都要經歷不斷的打磨。cloud studio 也有一些不足之處等待解決。

  1. 三種登錄方式,每一種注冊后都要重新實名認證,極為繁瑣不便。通過實名制的手機號可以關聯用戶數據,讓用戶數據在不同賬號下能保持統一或自由選擇。
  2. 項目運行起來后,回到首頁再次點擊該項目,會重開運行環境。其實這時候可以提示用戶,讓用戶來決定接下來如何操作。
  3. 項目運行中偶爾會出現意外錯誤,如圖所示,希望能排查。
    在這里插入圖片描述
  4. 在線 IDE 最大的弊端在于極強的依賴于網絡,如果網絡延遲或者服務器通信不穩定,會使開發工作得不償失。
  5. 安全性的需求增加了,以往只要防止代碼托管平臺的源碼泄漏,現在則要面臨開發環境的源碼泄漏問題。
  6. 對于一些特定的企業,在線IDE可能引發敏感項目和保密項目的數據泄漏。

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

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

相關文章

winform 設置畫刷半透明

使用solidBrush新建畫刷&#xff0c;定義畫刷的顏色為透明色 Brush b new SolidBrush(Color.FromArgb(50, Color.Green)); 這里的50是透明度的設置&#xff0c;范圍從0-255&#xff1b; 0:無顏色 255:不透明 轉&#xff1a;c# 設置Brush 畫刷 透明_solidcolorbrush 透明色_…

git-fatal: No url found for submodule path ‘packages/libary‘ in .gitmodules

文章目錄 前言一、git submodule功能使用二、錯誤信息&#xff1a;三、解決方法&#xff1a;四、.gitmodules配置文件&#xff1a;總結 前言 最近在做vue項目&#xff0c;因為項目比較復雜&#xff0c;把功能拆分成很多子模塊&#xff0c;我們使用Git的submodule功能。遇到錯誤…

使用libvncserver庫快速搭建VNC服務端

文章目錄 VNC是什么libvncserver的優點和缺點構建libvncserver使用libvncserver搭建VNCServerX11模擬鼠標鍵盤操作libvncserver中處理鼠標鍵盤消息 VNC是什么 VNC(Virtual Network Computing)是一種使用遠程幀緩沖協議(RFB)的屏幕分享及遠程操作軟件。VNC的服務端可以通過RFP協…

Linux開機啟動程序添加root權限

Linux添加開機啟動程序 Debain、Ubuntu系列Linux開機之后會執行/etc/rc.local文件中的命令&#xff0c;所以&#xff0c;如果是想添加登陸用戶所具有權限的操作&#xff0c;可以在文件中exit 0之前添加開機自動執行的腳本命令。或者將執行腳本的權限修改為當前登錄用戶具有執行…

基于R語言APSIM模型進階應用與參數優化、批量模擬

隨著數字農業和智慧農業的發展&#xff0c;基于過程的農業生產系統模型在模擬作物對氣候變化的響應與適應、農田管理優化、作物品種和株型篩選、農田固碳和溫室氣體排放等領域扮演著越來越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…

moodle單點登陸

在moodle/login添加sso.php <?phprequire(../config.php); require_once(lib.php);if($_SERVER[REQUEST_METHOD]==GET){$tokenId=$_GET[tokenId]; }else{$tokenId="fail";

C++新經典03--共用體、枚舉類型與typedef

共用體 共用體&#xff0c;也叫聯合&#xff0c;有時候需要把幾種不同類型的變量存放到同一段內存單元&#xff0c;例如&#xff0c;把一個整型變量、一個字符型變量、一個字符數組放在同一個地址開始的內存單元中。這三個變量在內存中占的字節數不同&#xff0c;但它們都從同…

idea 轉換為 Maven Project 的方法

選項&#xff1a; Add as Maven Project

通過TightVNC遠程訪問MacOS

目錄 一、下載 TightVNC 下載鏈接&#xff1a;https://www.tightvnc.com/ 下載后按步驟進行安裝&#xff0c;安裝完成后安裝目錄如下&#xff1a; 運行 tvnviewer.exe&#xff0c;輸入遠程 IP&#xff0c;點擊【connect】&#xff1a; 輸入密碼&#xff0c;點擊【OK】后即可遠…

Matlab中圖例的位置(圖例放在圖的上方、下方、左方、右方、圖外面)等

一、圖例默認位置 默認的位置在NorthEast r 10; a 0; b 0; t0:0.1:2.1*pi; xar*cos(t); ybr*sin(t); A1plot(x,y,r,linewidth,4);%圓 hold on axis equal A2plot([0 0],[1 10],b,linewidth,4);%直線 legend([A1,A2],圓形,line)二、通過Location對legend的位置進行改變 變…

企業電子招投標采購系統源碼之電子招投標的組成 tbms

? 功能模塊&#xff1a; 待辦消息&#xff0c;招標公告&#xff0c;中標公告&#xff0c;信息發布 描述&#xff1a; 全過程數字化采購管理&#xff0c;打造從供應商管理到采購招投標、采購合同、采購執行的全過程數字化管理。通供應商門戶具備內外協同的能力&#xff0c;為…

設計模式-觀察者模式(觀察者模式的需求衍變過程詳解,關于監聽的理解)

目錄 前言概念你有過這樣的問題嗎&#xff1f; 詳細介紹原理&#xff1a;應用場景&#xff1a; 實現方式&#xff1a;類圖代碼 問題回答監聽&#xff0c;為什么叫監聽&#xff0c;具體代碼是哪觀察者模式的需求衍變過程觀察者是為什么是行為型 總結&#xff1a; 前言 在軟件設計…

【C++類和對象】類有哪些默認成員函數呢?(下)

文章目錄 一、類的6個默認成員函數二、日期類的實現2.1 運算符重載部分2.2 日期之間的運算2.3 整體代碼1.Date.h部分2. Date.cpp部分 三. const成員函數四. 取地址及const取地址操作符重載擴展內容 總結 ヾ(????)&#xff89;" 人總要為過去的懶惰而付出代價ヾ(???…

2011年下半年 軟件設計師 上午試卷2

博主介紹&#xff1a;?全網粉絲3W&#xff0c;全棧開發工程師&#xff0c;從事多年軟件開發&#xff0c;在大廠呆過。持有軟件中級、六級等證書。可提供微服務項目搭建與畢業項目實戰&#xff0c;博主也曾寫過優秀論文&#xff0c;查重率極低&#xff0c;在這方面有豐富的經驗…

如何為你的表單添加一個反選功能

原始代碼 無標題文檔 <form id"form1" name"form1" method"post" action""><table width"50%" border"1" cellspacing"0" cellpadding"0"><tr><td bgcolor"#9999…

數據包如何游走于 Iptables 規則之間?

在前文《Linux路由三大件》中&#xff0c;我們提到了 iptables 可以修改數據包的特征從而影響其路由。這個功能無論是傳統場景下的 防火墻&#xff0c;還是云原生場景下的 服務路由&#xff08;k8s service&#xff09;、網絡策略(calico network policy) 等都有依賴。 雖然業…

ceph數據分布

ceph的存儲是無主結構&#xff0c;數據分布依賴client來計算&#xff0c;有兩個條主要路徑。 1、數據到PG 2、PG 到OSD 有兩個假設&#xff1a; 第一&#xff0c;pg的數量穩定&#xff0c;可以認為保持不變&#xff1b; 第二&#xff0c; OSD的數量可以增減&#xff0c;OSD的…

基于Java的深圳坂田附近閑置物品交易群管理系統

開發技術&#xff1a;java 開發框架&#xff1a;springmvc、spring、mybatis 數據庫&#xff1a;mysql 備注&#xff1a;方便大家將手中的二手閑置物品轉讓給需要的人&#xff0c;例如大家搬家的時候&#xff0c;有不要的&#xff08;冰箱、洗衣機、桌子、椅子&#xff09;等物…

RISC-V 整型通用寄存器介紹

簡介 RISC-V64位/32位提供了32個整型通用寄存器&#xff0c;編號是x0~x31&#xff0c;這些整型通用寄存器的寬度與架構位數一致。 浮點數寄存器與整形寄存器一樣也提供了32個&#xff1a;f0~f31&#xff0c;位數與架構位數一致。 通用寄存器介紹 零寄存器 x0/zero x0寄存…

力扣:65. 有效數字(Python3)

題目&#xff1a; 有效數字&#xff08;按順序&#xff09;可以分成以下幾個部分&#xff1a; 一個 小數 或者 整數&#xff08;可選&#xff09;一個 e 或 E &#xff0c;后面跟著一個 整數 小數&#xff08;按順序&#xff09;可以分成以下幾個部分&#xff1a; &#xff08;…