목차
간단한 설명
캔버스 기본
2D 컨텍스트 API
기본선
경로
插入图像
像素级操作
文字
阴影
颜色渐变
canvas 演示
小节
웹 프론트엔드 H5 튜토리얼 HTML5 캔버스 기본 구문_html5 튜토리얼 기술

HTML5 캔버스 기본 구문_html5 튜토리얼 기술

May 16, 2016 pm 03:51 PM
canvas html

HTML 5 캔버스 - 기본 구문

간단한 설명

5 사양에는 많은 새로운 기능이 도입되었으며, 가장 기대되는 것 중 하나는 요소입니다. HTML 5는 JavaScript를 통해 그래픽을 그리는 방법을 제공하며, 이는 사용하기 쉽지만 강력합니다. 각 요소에는 어떤 모양이든 그릴 수 있는 "컨텍스트"(작업판의 페이지를 생각해 보세요)가 있습니다. 브라우저는 여러 캔버스 컨텍스트를 지원하고 다양한 . 5 사양에는 많은 새로운 기능이 도입되었으며, 가장 기대되는 것 중 하나는 요소입니다. 5는 사용하기 간단하지만 강력한 JavaScript를 통해 그래픽을 그리는 방법을 제공합니다. 각 요소에는 어떤 모양이든 그릴 수 있는 "컨텍스트"(작업판의 페이지를 생각해 보세요)가 있습니다. 브라우저는 여러 캔버스 컨텍스트를 지원하고 다양한 .

Opera, Firefox, Konqueror 및 Safari를 포함한 대부분의 브라우저는 2D 캔버스 컨텍스트를 지원합니다. 또한 일부 Opera 버전은 3D 캔버스도 지원하며 Firefox는 플러그인을 통해 3D 캔버스도 지원할 수 있습니다.

    3D 캔버스,
  • HTML 비디오 및 파일 I/O를 지원하는 Opera
  • 를 다운로드하세요.
  • Opera 3D 캔버스 컨텍스트에 관한 기사
  • Firefox 3D 캔버스에 관한 기사
    컨텍스트

이 글에서는 2D 캔버스의 기본
과 선, 도형, 이미지, 텍스트 등 캔버스의 기본 기능을 사용하는 방법을 소개합니다. 이 기사를 이해하려면 JavaScript 기본 사항을 알아야 합니다.

여기를 클릭하면 이 기사의 예제 코드를 일괄 다운로드할 수 있습니다

캔버스 기본

캔버스를 만드는 방법은 매우 간단합니다. HTML<font face="NSimsun"><canvas><code><font face="NSimsun"><canvas></canvas></font>를 추가하면 됩니다. 페이지 > 요소:

<code><canvas id="myCanvas" width="300" height="150">
Fallback content, in case the browser does not support Canvas.
</canvas></code>
로그인 후 복사

JavaScript에서 요소를 참조하려면 요소의 ID를 설정하는 것이 가장 좋으며 캔버스의 높이와 너비도 설정해야 합니다.

캔버스를 만든 후 브러시를 준비합시다. 캔버스에 그래픽을 그리려면 JavaScript가 필요합니다. 먼저 <font face="NSimsun"> getElementById<code><font face="NSimsun"> getElementById</font> 함수를 통해 canvas
요소를 찾은 후 컨텍스트를 초기화합니다. 그런 다음 컨텍스트 API를 사용하여 다양한 그래픽을 그릴 수 있습니다. 다음 스크립트는 캔버스에 직사각형을 그립니다(효과를 보려면 여기를 클릭하세요).

<code>// Get a reference to the element.
var elem = document.getElementById('myCanvas');

// Always check for properties 和 methods, to make sure your code doesn't break 
// in other browsers.
if (elem && elem.getContext) {
  // Get the 2d context.
  // Remember: you can only initialize one context per element.
  var context = elem.getContext('2d');
  if (context) {
    // You are done! Now you can draw your first rectangle.
    // You only need to provide the (x,y) coordinates, followed by the width and 
    // height dimensions.
    context.fillRect(0, 0, 150, 100);
  }
}</code>
로그인 후 복사

위 코드를 문서의 <font face="NSimsun">head<code><font face="NSimsun">head</font> 섹션이나 외부 파일에 배치할 수 있습니다.

2D 컨텍스트 API

캔버스 생성 방법을 소개한 후 2D 캔버스 API를 살펴보고 이러한 기능으로 무엇을 할 수 있는지 살펴보겠습니다.

기본선

위의 예는 직사각형을 그리는 것이 얼마나 쉬운지 보여줍니다.

fillStyle스트로크 스타일 속성을 ​​통해 직사각형의 채우기 및 선을 쉽게 설정할 수 있습니다. 색상 값은 메소드와 16진수, (), () 및 ()를 사용합니다(Opera10 및 Firefox 3과 같이 브라우저가 지원하는 경우). 16진수, (), () 및 ()(Opera10 및 Firefox 3과 같은 브라우저에서 지원되는 경우).

<fontface>fillRect<code><font face="NSimsun">fillRect</font>를 사용하면 채워진 직사각형을 그릴 수 있습니다. 채우기 없이 테두리만 있는 직사각형을 그리려면 <fontface>strokRect<code><font face="NSimsun">strokeRect</font>를 사용하세요. 캔버스의 일부를 지우려면 <fontface>clearRect<code><font face="NSimsun">clearRect</font>를 사용하면 됩니다. 위 세 가지 메소드의 매개변수는 x, y, width, height로 동일합니다. 처음 두 매개변수는 (x,y) 좌표를 설정하고, 마지막 두 매개변수는 직사각형의 높이와 너비를 설정합니다.

lineWidth 속성을 ​​사용하여 선 두께를 변경할 수 있습니다. <fontface>fillRect<code><font face="NSimsun">fillRect</font>,
<fontface>strokRect<code><font face="NSimsun">strokeRect</font> clearRect<code><font face="NSimsun">clearRect</font> 및 기타 예:

<code>context.fillStyle   = '#00f'; // blue
context.strokeStyle = '#f00'; // red
context.lineWidth   = 4;

// Draw some rectangles.
context.fillRect  (0,   0, 150, 50);
context.strokeRect(0,  60, 150, 50);
context.clearRect (30, 25,  90, 60);
context.strokeRect(30, 25,  90, 60);</code>
로그인 후 복사

이 예의 렌더링은 그림 1에 나와 있습니다.

Example render of fillRect, strokeRect and clearRect.

그림 1: fillRect, 스트로크Rect 및
clearRect 렌더링

경로

캔버스 경로를 통해 어떤 모양이든 그릴 수 있습니다. 윤곽선을 먼저 그린 다음 테두리와 채우기를 그릴 수 있습니다. 사용자 정의 모양을 만드는 방법은 간단합니다. <fontface>beginPath()<code><font face="NSimsun"> beginPath()</font>를 사용하여 그리기를 시작한 다음 선, 곡선 및 기타 모양을 사용하여 모양을 그립니다. 그린 후 <fontface>fill<code><font face="NSimsun">fill</font><fontface>Stroke<code><font face="NSimsun">stroke</font>를 호출하여 채우기를 추가하거나 테두리를 설정합니다. 사용자 정의 그래픽 그리기를 종료하려면 <font face="NSimsun"> closePath()<code><font face="NSimsun"> closePath()</font>를 호출하세요.

다음은 삼각형을 그리는 예입니다.

<code>// Set the style properties.
context.fillStyle   = '#00f';
context.strokeStyle = '#f00';
context.lineWidth   = 4;

context.beginPath();
// Start from the top-left point.
context.moveTo(10, 10); // give the (x,y) coordinates
context.lineTo(100, 10);
context.lineTo(10, 100);
context.lineTo(10, 10);

// Done! Now fill the shape, 和 draw the stroke.
// Note: your shape will not be visible until you call any of the two methods.
context.fill();
context.stroke();
context.closePath();</code>
로그인 후 복사

렌더링은 그림 2에 나와 있습니다.

HTML5 캔버스 기본 구문_html5 튜토리얼 기술

图 2: 三角形

另一个较负责的例子中使用了直线、曲线和圆弧。

插入图像

<font face="NSimsun">drawImage</font> 方法允许在 canvas 中插入其他图像
(<font face="NSimsun"> img</font><font face="NSimsun">canvas</font> 元素) 。在 Opera 中可以再 canvas 中绘制 SVG 图形。此方法比较复杂,可以有3个、5个或9个参数:

  • 3个参数:最基本的 <font face="NSimsun">drawImage</font> 使用方法。一个参数指定图像位置,另两个参数设置图像在 canvas中的位置。
  • 5个参数:中级的 <font face="NSimsun">drawImage</font> 使用方法,包括上面所述3个参数,加两个参数指明插入图像宽度和高度 (如果你想改变图像大小)。
  • 9个参数:最复杂 <font face="NSimsun">drawImage</font> 杂使用方法,包含上述5个参数外,另外4个参数设置源图像中的位置和高度宽度。这些参数允许你在显示图像前动态裁剪源图像。

下面是上述三个使用方法的例子:

<code>// Three arguments: the element, destination (x,y) coordinates.
context.drawImage(<var>img_elem</var>, <var>dx</var>, <var>dy</var>);

// Five arguments: the element, destination (x,y) coordinates, and destination 
// width and height (if you want to resize the source image).
context.drawImage(<var>img_elem</var>, <var>dx</var>, <var>dy</var>, <var>dw</var>, <var>dh</var>);

// Nine arguments: the element, source (x,y) coordinates, source width and 
// height (for cropping), destination (x,y) coordinates, and destination width 
// and height (resize).
context.drawImage(<var>img_elem</var>, <var>sx</var>, <var>sy</var>, <var>sw</var>, <var>sh</var>, <var>dx</var>, <var>dy</var>, <var>dw</var>, <var>dh</var>);</code>
로그인 후 복사

其效果见图3.

Example rendering of drawImage.

图 3: <font face="NSimsun">drawImage</font> 效果图。

像素级操作

2D Context API 提供了三个方法用于像素级操作:<font face="NSimsun">createImageData</font>, <font face="NSimsun">getImageData</font>, 和
<font face="NSimsun">putImageData</font>

<font face="NSimsun">ImageData</font>对象保存了图像像素值。每个对象有三个属性: width, height
datadata 属性类型为CanvasPixelArray,用于储存<font face="NSimsun"><var>width</var>*<var>height</var>*4</font>个像素值。每一个像素有RGB值和透明度alpha值(其值为 0 至
255,包括alpha在内!)。像素的顺序从左至右,从上到下,按行存储。

为了更好的理解其原理,让我们来看一个例子——绘制红色矩形

<code>// Create an ImageData object.
var imgd = context.createImageData(50,50);
var pix = imgd.data;

// Loop over each pixel 和 set a transparent red.
for (var i = 0; n = pix.length, i </code>
로그인 후 복사

注意: 不是所有浏览器都实现了<font face="NSimsun"> createImageData</font>。在支持的浏览器中,需要通过<font face="NSimsun"> getImageData</font> 方法获取<font face="NSimsun"> ImageData</font> 对象。请参考示例代码。

通过 <font face="NSimsun">ImageData</font> 可以完成很多功能。如可以实现图像滤镜,或可以实现数学可视化 (如分形和其他特效)。下面特效实现了简单的颜色反转滤镜:

<code>// Get the <code>CanvasPixelArray</code> from the given coordinates and dimensions.
var imgd = context.getImageData(<var>x</var>, <var>y</var>, <var>width</var>, <var>height</var>);
var pix = imgd.data;

// Loop over each pixel and invert the color.
for (var i = 0, n = pix.length; i ImageData</code> at the given (x,y) coordinates.
context.putImageData(imgd, <var>x</var>, <var>y</var>);
로그인 후 복사

图 4 显示了使用此滤镜后的 Opera
图像 (图 3是原图)。

Example rendering of the invert color filter.

图 4: 颜色反转滤镜

文字

虽然最近的 WebKit 版本和 Firefox 3.1 nightly build 才开始支持 Text API ,为了保证文章完整性我决定仍在这里介绍文字 API 。

<font face="NSimsun">context</font> 对象可以设置以下 text 属性:

  • <font face="NSimsun">font</font>:文字字体,同属性 属性
  • <font face="NSimsun">textAlign</font>:文字水平对齐方式。可取属性值: <font face="NSimsun">start</font>, <font face="NSimsun">end</font>, <font face="NSimsun">left</font>,
    <font face="NSimsun">right</font>, <font face="NSimsun">center</font>。默认值:
    <font face="NSimsun">start</font>.
  • <font face="NSimsun">textBaseline</font>:文字竖直对齐方式。可取属性值:<font face="NSimsun">top</font>, <font face="NSimsun">hanging</font>, <font face="NSimsun">middle</font>,
    <font face="NSimsun">alphabetic</font>, <font face="NSimsun">ideographic</font>, <font face="NSimsun">bottom</font>。默认值:<font face="NSimsun">alphabetic</font>.

有两个方法可以绘制文字: <font face="NSimsun">fillText</font><font face="NSimsun">strokeText</font>。第一个绘制带 fillStyle 填充的文字,后者绘制只有 strokeStyle 边框的文字。两者的参数相同:要绘制的文字和文字的位置(x,y) 坐标。还有一个可选选项——最大宽度。如果需要的话,浏览器会缩减文字以让它适应指定宽度。

文字对齐属性影响文字与设置的
(x,y) 坐标的相对位置。

下面是一个在 canvas 中绘制"hello world" 文字的例子

<code>context.fillStyle    = '#00f';
context.font         = 'italic 30px sans-serif';
context.textBaseline = 'top';
context.fillText  ('Hello world!', 0, 0);
context.font         = 'bold 30px sans-serif';
context.strokeText('Hello world!', 0, 50);</code>
로그인 후 복사

图 5 是其效果图。

Example text render.

图 5: 文字效果

阴影

目前只有 Konqueror 和 Firefox 3.1 nightly build 支持 Shadows API 。API 的属性为:

  • <font face="NSimsun">shadowColor</font>:阴影颜色。其值和 CSS 颜色值一致。
  • <font face="NSimsun">shadowBlur</font>:设置阴影模糊程度。此值越大,阴影越模糊。其效果和 Photoshop 的高斯模糊滤镜相同。
  • <font face="NSimsun">shadowOffsetX</font><font face="NSimsun">shadowOffsetY</font>:阴影的 x 和 y 偏移量,单位是像素。

下面是 canvas 阴影的例子:

<code>context.shadowOffsetX = 5;
context.shadowOffsetY = 5;
context.shadowBlur    = 4;
context.shadowColor   = 'rgba(255, 0, 0, 0.5)';
context.fillStyle     = '#00f';
context.fillRect(20, 20, 150, 100);</code>
로그인 후 복사

其效果见图 6。

Example canvas shadow - a blue rectangle with a red shadow.

图 6: canvas 阴影效果——蓝色矩形,红色阴影

颜色渐变

除了 CSS 颜色,<font face="NSimsun"> fillStyle</font><font face="NSimsun">strokeStyle</font> 属性可以设置为 <font face="NSimsun">CanvasGradient</font> 对象。——通过 <font face="NSimsun">CanvasGradient</font>可以为线条和填充使用颜色渐变。

欲创建 <font face="NSimsun">CanvasGradient</font> 对象,可以使用两个方法:<font face="NSimsun">createLinearGradient</font><font face="NSimsun">createRadialGradient</font>。前者创建线性颜色渐变,后者创建圆形颜色渐变。

创建颜色渐变对象后,可以使用对象的 <font face="NSimsun">addColorStop</font> 方法添加颜色中间值。

下面的代码演示了颜色渐变使用方法:

<code>// You need to provide the source 和 destination (x,y) coordinates 
// for the gradient (from where it starts 和 where it ends).
var gradient1 = context.createLinearGradient(<var>sx</var>, <var>sy</var>, <var>dx</var>, <var>dy</var>);

// Now you can add colors in your gradient.
// The first argument tells the position for the color in your gradient. The 
// accepted value range is from 0 (gradient start) to 1 (gradient end).
// The second argument tells the color you want, using the CSS color format.
gradient1.addColorStop(0,   '#f00'); // red
gradient1.addColorStop(0.5, '#ff0'); // yellow
gradient1.addColorStop(1,   '#00f'); // blue

// For the radial gradient you also need to provide source
// 和 destination circle radius.
// The (x,y) coordinates define the circle center points (start 和 
// destination).
var gradient2 = context.createRadialGradient(<var>sx</var>, <var>sy</var>, <var>sr</var>, <var>dx</var>, <var>dy</var>, <var>dr</var>);

// Adding colors to a radial gradient is the same as adding colors to linear 
// gradients.</code>
로그인 후 복사

我也准备了一个更复杂的例子,使用了线性颜色渐变、阴影和文字。其效果见图 7。

Example rendering using a linear gradient.

图 7: 使用线性颜色渐变的例子

canvas 演示

如果你想知道使用 Canvas可以做些什么,可以参看以下的工程:

  • Opera Widget:
    • SimAquarium
    • Artist's
      Sketchbook
    • Spirograph
  • 在线工程和演示
    • Newton polynomial
    • Canvascape - "3D Walker"
    • Paint.Web - painting
      demo, open-source
    • Star-field
      flight
    • Interactive blob

小节

Canvas 是 HTML 5最让人期待的特性之一,目前已获得大部分 Web 浏览器支持。Canvas 可以帮助创建游戏、增强图形用户界面。2D context
API 提供大量图形绘制功能——我希望通过本文你了解了 canvas 使用,并且你有兴趣了解更多!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML의 테이블 테두리 HTML의 테이블 테두리 Sep 04, 2024 pm 04:49 PM

HTML의 테이블 테두리 안내. 여기에서는 HTML의 테이블 테두리 예제를 사용하여 테이블 테두리를 정의하는 여러 가지 방법을 논의합니다.

HTML 여백-왼쪽 HTML 여백-왼쪽 Sep 04, 2024 pm 04:48 PM

HTML 여백-왼쪽 안내. 여기에서는 HTML margin-left에 대한 간략한 개요와 코드 구현과 함께 예제를 논의합니다.

HTML의 중첩 테이블 HTML의 중첩 테이블 Sep 04, 2024 pm 04:49 PM

HTML의 Nested Table에 대한 안내입니다. 여기에서는 각 예와 함께 테이블 내에 테이블을 만드는 방법을 설명합니다.

HTML 테이블 레이아웃 HTML 테이블 레이아웃 Sep 04, 2024 pm 04:54 PM

HTML 테이블 레이아웃 안내. 여기에서는 HTML 테이블 레이아웃의 값에 대해 예제 및 출력 n 세부 사항과 함께 논의합니다.

HTML 입력 자리 표시자 HTML 입력 자리 표시자 Sep 04, 2024 pm 04:54 PM

HTML 입력 자리 표시자 안내. 여기서는 코드 및 출력과 함께 HTML 입력 자리 표시자의 예를 논의합니다.

HTML 정렬 목록 HTML 정렬 목록 Sep 04, 2024 pm 04:43 PM

HTML 순서 목록에 대한 안내입니다. 여기서는 HTML Ordered 목록 및 유형에 대한 소개와 각각의 예에 대해서도 설명합니다.

HTML에서 텍스트 이동 HTML에서 텍스트 이동 Sep 04, 2024 pm 04:45 PM

HTML에서 텍스트 이동 안내. 여기서는 Marquee 태그가 구문과 함께 작동하는 방식과 구현할 예제에 대해 소개합니다.

HTML 온클릭 버튼 HTML 온클릭 버튼 Sep 04, 2024 pm 04:49 PM

HTML onclick 버튼에 대한 안내입니다. 여기에서는 각각의 소개, 작업, 예제 및 다양한 이벤트의 onclick 이벤트에 대해 설명합니다.

See all articles