让人着迷的 Canvas (一)

94 阅读4分钟

前言

hello,大家好,当前社会 AI 在高速的发展,各种大模型层出不穷,文生文、文生图、图生图、甚至是视频领域都有了 AI 的影子,我们作为一名前端,噢不,高级前端开发工程师,肯定是又有了一片属于我们的发展空间,毕竟用户对AI的感受都是需要我们开发的客户端来呈现的,所以打算和大家一起来学习分享一下 canvas, 为什么呢?大家应该对 AIGC(生成式人工智能) 这个名词不陌生,我们这个课题呢就是为了能够进军 图生图 这个领域,这个领域有什么场景呢?

很典型的例子:p图,在AI没出来之前呢,我们主要是靠photoshop、手机APP 提供的一些工具,来手动p图,说实话,上手门槛不低的,但是现在有了 AI,我们就可以用我们的语言描述,让 AI 来帮我们做这些操作,这极大地简化了P图的过程,话说回来,跟我们这个课题有什么关系呢,重点来了,我们可以对图片进行一些简单的预处理,比如摆放位置,需要给图片加上一些明确的素材,然后交给AI,让AI帮我们进行完善,这样就可以让AI生成更符合我们预期的图片了,而对图片的操作,那肯定就离不开 canvas 了。

除了上述的场景,还有一些比如:画板、在线文档这些都能够适用,好了,话不多说,我们开始吧。

canvas 基础知识

<canvas> 是一个可以使用脚本 (通常为JavaScript) 来绘制图形的 HTML 元素。例如,它可以用于绘制图表、制作图片构图或者制作简单的动画。

本篇教程从一些基础开始,描述了如何使用元素来绘制 2D 图形。教程中提供的例子,会让你明白可以用 canvas 做什么,也会提供一些代码片段来帮助你开始构建自己的内容。

<canvas> 最早由 Apple 引入 WebKit,用于 Mac OS X 的 Dashboard,随后被各个浏览器实现。如今,所有主流的浏览器都支持它。

使用 <canvas> 元素不是非常难,但你需要一些基本的HTMLJavaScript知识。除一些过时的浏览器不支持<canvas> 元素外,所有的新版本主流浏览器都支持它。Canvas 的默认大小为 300 像素 ×150 像素(宽 × 高,像素的单位是 px)。但是,可以使用 HTML 的高度和宽度属性来自定义 Canvas 的尺寸。为了在 Canvas 上绘制图形,我们使用一个 JavaScript 上下文对象,它能动态创建图像(creates graphics on the fly)。

canva 基本用法

<canvas width="150" height="150"></canvas>

<canvas> 看起来和 <img> 元素很相像,唯一的不同就是它并没有 src 和 alt 属性。实际上,<canvas> 标签只有两个属性**——** widthheight。这些都是可选的,并且同样利用 DOM properties 来设置。当没有设置宽度和高度的时候,canvas 会初始化宽度为 300 像素和高度为 150 像素。该元素可以使用CSS来定义大小,但在绘制时图像会伸缩以适应它的框架尺寸:如果 CSS 的尺寸与初始画布的比例不一致,它会出现扭曲。

备注:  如果你绘制出来的图像是扭曲的,尝试用 width 和 height 属性为明确规定宽高,而不是使用 CSS。

在对于有些不支持 canvas 的环境下,我们可以使用以下的代替内容

<canvas width="150" height="150">
    快升级浏览器吧,都老古董了
</canvas>

现在我们的页面上就能够多出来了一个 canvas 元素,快试试吧!

渲染上下文

<canvas> 元素创造了一个固定大小的画布,它公开了一个或多个渲染上下文,其可以用来绘制和处理要展示的内容。我们将会将注意力放在 2D 渲染上下文中。其他种类的上下文也许提供了不同种类的渲染方式;比如, WebGL 使用了基于OpenGL ES的 3D 上下文 ("experimental-webgl") 。

canvas 起初是空白的。为了展示,首先脚本需要找到渲染上下文,然后在它的上面绘制。<canvas> 元素有一个叫做 getContext() 的方法,这个方法是用来获得渲染上下文和它的绘画功能。getContext()接受一个参数,即上下文的类型。对于 2D 图像而言,如本教程,你可以使用 CanvasRenderingContext2D

<canvas id="canvas" width="150" height="150"></canvas>
<script type="text/javascript">
    var canvas = document.getElementById("canvas");
    if (canvas.getContext) {
        var ctx = canvas.getContext("2d");
        ctx.fillStyle = "rgb(200,0,0)";
        ctx.fillRect(10, 10, 55, 50);
        ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
        ctx.fillRect(30, 30, 55, 50);
    }
</script>

把这段代码放到 里面,你就能得到以下内容:

image.png

好了,canvas 基础知识我们就讲这么多了,后面我们肯定是要围绕着渲染上下文来学习了,下一章我会介绍我们后续所要用到的高频 API ,其余的可自行去了解。