首页 > 其他分享 >【腾讯云 Cloud Studio 实战训练营】在线 IDE 编写 canvas 转换黑白风格头像

【腾讯云 Cloud Studio 实战训练营】在线 IDE 编写 canvas 转换黑白风格头像

时间:2023-08-15 10:11:41浏览次数:39  
标签:canvas github Studio var IDE data Cloud

关于 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或255

            if (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 ,大功告成 。

请在此添加图片描述

项目地址

标签:canvas,github,Studio,var,IDE,data,Cloud
From: https://www.cnblogs.com/ziluohuanghun/p/17630586.html

相关文章

  • H5用canvas放烟花
    很久很久以前的一个很流行的javaApplet放烟花效果,当初移到android过,这次摸鱼时间翻译成js代码,用canvas实现这么多年,终于能大致看懂这代码了,已经实现透明效果,只需要给body弄个好看的背景图片就行,但需要主色为深色,看到的人谁有兴趣美化下,弄个背景加个声音啥的,不过没啥用......
  • New与override区别
    New与Override区别New(隐藏)new是指“隐藏”,是指子类隐藏了父类的方法,当然,通过一定的转换,可以在子类的对象中访问父类的方法。new是派生类用来隐藏基类中的方法的;也就是说在派生类中“看不到”基类中的方法;如果要在派生类中隐藏(不是重写)基类中的方法,而没有使用new关键字,编......
  • ASP.NET Core Identity 系列之四
    这节我们主要介绍ASP.NETCoreIdentity认证,认证是决定用户是否能够成功登录应用程序的一个过程,用户通过提供自己的用户名和密码来证明他们自己是真实用户,当登录成功时,Identity认证用户并且赋予访问ASP.NETCore应用程序安全资源1、ASP.NETCoreIdentity如何认证我们创建AS......
  • ASP.NET Core Identity 系列之四
    这节我们主要介绍ASP.NETCoreIdentity认证,认证是决定用户是否能够成功登录应用程序的一个过程,用户通过提供自己的用户名和密码来证明他们自己是真实用户,当登录成功时,Identity认证用户并且赋予访问ASP.NETCore应用程序安全资源1、ASP.NETCoreIdentity如何认证我们创建AS......
  • Idea创建JavaEE项目
    1.创建一个空项目     2创建空项目完成。然后通过idea来管理tomcat2.1idea中引入tomcat 2.2设置整个项目的通用tomcat开关     2.3启动/关闭tomcat 3.创建网站,并编写Servlet。在project目录下,一个module即是一个网站。3.1创建网站mo......
  • Visual Studio 的集成开发环境
    集成开发环境(IDE): 最重要的特点之一是将所有开发活动整合到一个界面中,使开发者能够在一个工具中完成编码、调试、测试和部署等多个任务。集成性(Integration): VisualStudio将多个开发工具和流程整合到一个界面中,使开发者能够更加高效地进行软件开发。多语言支持(Multi-LanguageS......
  • idea拉取代码时提示fatal: Authentication failed
    之前提交代码都很正常,突然今天push代码的时候,提示: 哎,奇怪了,回想了一下,最近更新了密码!,但是在idea拉取代码时,由于之前输入过密码不会再提示重新输入了,怎么办呢?呜呼~感谢前辈以及老师打开控制面板,点击用户账户 点击管理windows凭据 然后在打开的选项中,找到你用的git地址......
  • OpenCV笔记:cv2.VideoCapture 完成视频的跳帧输出操作
    前言 我开始关注这个问题,是在使用PaddleOCR+OpenCV进行视频文字识别的时候,因为OpenCV需要循环读取视频的每一帧进行解析,这就导致视频播放特别卡顿。由于视频中相邻帧的内容是一样的,重复识别也没有意义,所以我就在考虑:有没有办法跳帧输出?来源:https://blog.csdn.net/weixin_4425......
  • Visual studio-Git工具使用个人版
    开源的git管理工具确实非常方便,相信很多小伙伴工作了一些年都会有自己的代码库,有的时候做一个新的项目了,需要使用到以前用过的技术,这个时候在去翻找以前的项目,可能就找不到了,但是吧代码库都整理到git上就方便多了,而且有什么新的代码或者优化等等都可以在任何地方修改和同步,想想还......
  • 使用canvas(2d)+js实现一个简单的傅里叶级数绘制方波图
    先看效果查看页面右下角,嘿嘿简要说明创建具有不同半径与角速度的圆集合;(截图中展现的效果为5个,代码是30个,运行后效果会不同)constgetCircles=(N=10)=>{constret=[];for(leti=0;i<N;i+=1){ret.push({r:100/(i*2+1),ω:i*2+1,......