찾다
웹 프론트엔드H5 튜토리얼HTML5 Canvas API 프로그래밍 _html5 튜토리얼 기술


코드 복사
코드는 다음과 같습니다.



캔버스 가입


코드 복사
코드는 다음과 같습니다.

//캔버스 요소 가져오기 및 그리기 컨텍스트 var canvas = document.getElementById("diagonal");
var context = canvas.getContext("2d");
//절대 좌표를 사용하여 경로 만들기
context.beginPath( );
context.moveTo(70, 140);
context.lineTo(140, 70);
//캔버스에 이 선을 그립니다
context.Stroke()

변형

변환(확대/축소, 이동, 회전) 등을 통해 위와 동일한 효과를 얻을 수 있습니다.

변형을 이용하여 대각선 그리기


코드 복사
코드는 다음과 같습니다.

//캔버스 요소 가져오기 및 그리기 컨텍스트
var canvas = document.getElementById("diagonal");
var context = canvas.getContext("2d");
//현재 그리기 상태 저장
context.save ();
//그리기 컨텍스트를 오른쪽 아래로 이동
context.translate(70, 140);
//원점을 시작점으로 하여 이전과 같은 선분을 그린다
context.beginPath();
context .moveTo(0, 0);
context.lineTo(70, -70);
context.Stroke();

context.restore()

경로

HTML5 Canvas API의 경로는 렌더링하려는 모든 모양을 나타냅니다.

beginPath(): 그리기 시작하는 그래픽의 종류에 관계없이 가장 먼저 호출해야 하는 것은 BeginPath입니다. 이 간단한 함수는 매개 변수를 사용하지 않으며 캔버스에 새 그래픽 그리기를 시작할 것임을 알리는 데 사용됩니다.

moveTo(x,y): 그리지 않고 현재 위치를 새로운 대상 좌표(x,y)로 이동합니다.

lineTo(x,y): 현재 위치를 새로운 대상 좌표(x,y)로 이동할 뿐만 아니라 두 좌표 사이에 직선을 그립니다.

closePath(): 이 함수는 lineTo와 매우 유사하게 동작합니다. 유일한 차이점은 closePath가 자동으로 경로의 시작 좌표를 대상 좌표로 사용한다는 것입니다. 또한 현재 그려진 모양이 닫혀 있거나 완전히 닫힌 영역을 형성하고 있음을 캔버스에 알리므로 향후 채우기 및 획에 매우 유용합니다.

소나무 캐노피 그리기


코드 복사
코드는 다음과 같습니다.

function createCanopyPath(context) {
// 나무 캐노피 그리기
context.beginPath();

context.moveTo(-25, -50);
context.lineTo(-10, -80);
context.lineTo(-20, -80);
context.lineTo( -5, -110);
context.lineTo(-15, -110);

//트리의 정점
context.lineTo(0, -140);

context.lineTo(15, -110);
context.lineTo(5, -110);
context.lineTo(20, -80);
context.lineTo(10, - 80);
context.lineTo(25, -50);
// 시작점 연결, 닫힌 경로
context.closePath();
}

function drawTrails() {
var canvas = document.getElementById('diagonal');
var context = canvas.getContext('2d');

context.save();
context.translate(130, 250);

//캐노피를 나타내는 경로 생성
createCanopyPath(context);

// 현재 경로 그리기
context.Stroke();
context.restore();
}

window.addEventListener("load", drawTrails, true)

획 스타일

스트로크 모드를 사용하여 나무 왕관을 더욱 사실적으로 보이게 만드세요.


코드 복사
코드는 다음과 같습니다.

//줄 넓히기
context .lineWidth = 4;
//매끄러운 경로의 연결점
context.lineJoin = 'round';
//Color
context.StrokeStyle = '#663300';
//현재 경로 그리기
context.Stroke()

채우기 스타일

context.fillStyle = "#339900"; context.fill()

사각형 그리기

나무에 줄기를 추가합니다

context.fillStyle = '#663300'; context.fillRect(-5, -50, 10, 50);

곡선 그리기


코드 복사
코드는 다음과 같습니다.

context.save();
context.translate(-10, 350);
context.beginPath();

// 첫 번째 곡선은 오른쪽 위쪽으로 곡선을 이룹니다
context.moveTo(0, 0);
context.quadraticCurveTo(170, -50, 260, -190);

//오른쪽 아래로 곡선
context.quadraticCurveTo(310, -250, 410, -250);

// 넓은 갈색 획으로 경로를 그립니다.
context.StrokeStyle = '#663300';
context.lineWidth = 20;
context.Stroke();

// 이전 캔버스 상태 복원
context.restore()

캔버스에 그림 삽입

이미지 작업을 하려면 이미지가 완전히 로드될 때까지 기다려야 합니다. 브라우저는 일반적으로 페이지 스크립트가 실행될 때 이미지를 비동기적으로 로드합니다. 이미지가 완전히 로드되기 전에 캔버스에 렌더링하려고 하면 캔버스에 이미지가 표시되지 않습니다. 따라서 이미지가 로드되었는지 확인하는 데 특별한 주의가 필요합니다. .


코드 복사
코드는 다음과 같습니다.

// 이미지 로드
var bark = new Image();
bark.src = "bark.jpg";

// 이미지가 로드된 후 그리기 함수
bark.onload = function () {
drawTrails();
}

호출

사진 보기:

//나무 줄기의 배경으로 배경 패턴을 채웁니다. context.drawImage(bark, -5, -50, 10, 50);

그라데이션

그라디언트를 사용하려면 세 단계가 필요합니다.

(1) 그라데이션 개체 만들기

(2) 그라디언트 개체의 색상을 설정하고 전환 방법을 지정합니다

(3) 상황에 따라 채우기 스타일 또는 획 스타일에 대한 그라데이션 설정


코드 복사
코드는 다음과 같습니다.

// 3개를 생성합니다 -차원 나무 줄기 텍스처 수평 그라데이션 순서
var trunkGradient = context.createLinearGradient(-5, -50, 5, -50);

//몸통의 왼쪽 가장자리는 일반적으로 갈색입니다
trunkGradient.addColorStop(0, '#663300');

// 트렁크 왼쪽 가운데 부분의 색상에 대해 논의가 필요합니다
trunkGradient.addColorStop(0.4, '#996600');

//오른쪽 가장자리의 색상이 더 어두워야 합니다
trunkGradient.addColorStop(1, '#552200');

// 트렁크를 그라데이션으로 채우기
context.fillStyle = trunkGradient;
context.fillRect(-5, -50, 10, 50);
// 세로 그라데이션을 만들어 나무 줄기에 캐노피 그림자가 있는 트렁크
var canopyShadow = context.createLinearGradient(0, -50, 0, 0);
// 투영 그라데이션의 시작점은 투명도가 50%인 검은색입니다.
canopyShadow.addColorStop(0, ' rgba(0, 0, 0, 0.5)');
// 방향은 수직 아래쪽입니다. 짧은 거리 내에서는 그라데이션이 완전히 투명하게 빠르게 변경됩니다.
// 이 길이를 초과하는 투영
canopyShadow.addColorStop(0.2, 'rgba(0, 0, 0, 0.0)');

// 투영 그라데이션으로 나무 줄기를 채웁니다.
context.fillStyle = canopyShadow;
context.fillRect(-5, -50, 10, 50);

배경 이미지


코드 복사
코드는 다음과 같습니다.

// 이미지 로드
var gravel = new Image();
gravel.src = "gravel.jpg";
gravel.onload = function () {
drawTrails();
}

//두꺼운 갈색 선을 배경 이미지로 교체
context.StrokeStyle = context.createPattern(gravel, 'repeat');
context.lineWidth = 20;
context.Stroke() ;

context.createPattern의 두 번째 매개변수는 반복성 표시이며 표 2-1에서 적절한 값을 선택할 수 있습니다.

平铺方式   意义
repeat (默认值)图片会在两个方向平铺
repeat-x 横向平铺
repeat-y 纵向平铺
no-repeat 图片只显示一次,不平铺

확대

스케일링 함수 context.scale(x,y): x와 y는 각각 x와 y 차원의 값을 나타냅니다. 각 매개변수는 캔버스에 이미지를 표시할 때 방향축을 기준으로 이미지를 확대(또는 축소)해야 하는 양을 전달합니다. x 값이 2이면 그려진 이미지의 모든 요소 너비가 2배가 된다는 뜻이고, y 값이 0.5이면 그려진 이미지의 높이는 이전보다 절반이 됩니다.


코드 복사
코드는 다음과 같습니다.

// X=130 , Y= 250에 첫 번째 트리 그리기
context.save();
context.translate(130, 250);
drawTree(context);
context.restore(); p>

// X=260, Y=500에 두 번째 트리를 그립니다.
context.save();
context.translate(260, 500);

//두 번째 트리의 높이와 너비를 원래 값의 2배로 늘립니다.
context.scale(2, 2);
drawTree(context);
context.restore();

회전

이미지 회전


코드 복사
코드는 다음과 같습니다.

context.save();
//회전 각도 매개변수는 라디안 단위입니다
context.rotate(1.57);
context.drawImage(myImage, 0, 0, 100, 100);

context.restore();

변환 활용법


코드 복사
코드는 다음과 같습니다.

// 현재 상태를 저장합니다
컨텍스트 .save();

// Y 값이 증가함에 따라 X 값도 증가합니다.
// 그림자로 사용되는 기울어진 나무를 만들 수 있습니다.
// 변환을 적용한 후 모두 좌표는 행렬
context.transform(1, 0,
-0.5, 1,
, 0);

// Y축 방향으로 그림자 높이를 원래 값의 60%로 변경합니다
context.scale(1, 0.6);

// 투명도 20%의 검은색으로 트렁크를 채웁니다
context.fillStyle = 'rgba(0, 0, 0, 0.2)';
context.fillRect(-5, -50, 10, 50);

//기존 그림자 효과를 사용하여 트리를 다시 그립니다.
createCanopyPath(context);
context.fill();

//이전 캔버스 상태 복원
context.restore();

텍스트

context.fillText(text,x,y,maxwidth): 텍스트 텍스트 콘텐츠, x,y는 텍스트 위치를 지정하고, maxwidth는 텍스트 위치를 제한하는 선택적 매개변수입니다.
context.스트로크텍스트(text,x,y,maxwidth): 텍스트 텍스트 콘텐츠, x,y는 텍스트 위치를 지정하고, maxwidth는 텍스트 위치를 제한하는 선택적 매개변수입니다.


코드 복사
코드는 다음과 같습니다.

// 캔버스에 텍스트 그리기
context.save();

//글꼴 크기는 60이고 글꼴은 Impact
context.font = "60px Impact";

//채우기 색상
context.fillStyle = '#996600';
//Center
context.textAlign = 'center';

//텍스트 그리기
context.fillText('Happy Trails!', 200, 60, 400);
context.restore();

그림자

여러 전역 컨텍스트 속성을 통해 그림자를 제어할 수 있습니다

属性  值  备注
shadowColor  任何CSS中的颜色值 可以使用透明度(alpha)
shadowOffsetX 像素值  值为正数,向右移动阴影;为负数,向左移动阴影
shadowOffsetY 像素值 值为正数,向下移动阴影;为负数,向上移动阴影
shadowBlur 高斯模糊值 值越大,阴影边缘越模糊


코드 복사
코드는 다음과 같습니다.

// 색상 검정, 20 % 투명도
context.shadowColor = 'rgba(0, 0, 0, 0.2)';

// 오른쪽으로 15px, 왼쪽으로 10px 이동
context.shadowOffsetX = 15;
context.shadowOffsetY = -10;

// 약간 흐린 그림자
context.shadowBlur = 2;

픽셀 데이터

context.getImageData(sx, sy, sw, sh): sx, xy는 점을 결정하고, sw: 너비, sh: 높이.

이 함수는 세 가지 속성을 반환합니다. 너비 각 행의 픽셀 수 높이 각 열의 픽셀 수

캔버스에서 얻은 각 픽셀의 RGBA 값(빨간색, 녹색, 파란색 및 투명도 값)의 데이터 그룹입니다.

context.putImageData(imagedata,dx,dy): 개발자는 이미지 데이터 세트를 전달할 수 있습니다. dx 및 dy를 사용하면 지정된 캔버스 위치로 이동합니다. 🎜>

들어오는 픽셀 데이터를 표시합니다.

canvas.toDataUrl: 현재 캔버스에 표시된 데이터는 프로그래밍 방식으로 얻을 수 있습니다. 얻은 데이터는 텍스트 형식으로 저장되며 브라우저는 이를 이미지로 구문 분석할 수 있습니다.

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
html5的div一行可以放两个吗html5的div一行可以放两个吗Apr 25, 2022 pm 05:32 PM

html5的div元素默认一行不可以放两个。div是一个块级元素,一个元素会独占一行,两个div默认无法在同一行显示;但可以通过给div元素添加“display:inline;”样式,将其转为行内元素,就可以实现多个div在同一行显示了。

html5中列表和表格的区别是什么html5中列表和表格的区别是什么Apr 28, 2022 pm 01:58 PM

html5中列表和表格的区别:1、表格主要是用于显示数据的,而列表主要是用于给数据进行布局;2、表格是使用table标签配合tr、td、th等标签进行定义的,列表是利用li标签配合ol、ul等标签进行定义的。

html5怎么让头和尾固定不动html5怎么让头和尾固定不动Apr 25, 2022 pm 02:30 PM

固定方法:1、使用header标签定义文档头部内容,并添加“position:fixed;top:0;”样式让其固定不动;2、使用footer标签定义尾部内容,并添加“position: fixed;bottom: 0;”样式让其固定不动。

HTML5中画布标签是什么HTML5中画布标签是什么May 18, 2022 pm 04:55 PM

HTML5中画布标签是“<canvas>”。canvas标签用于图形的绘制,它只是一个矩形的图形容器,绘制图形必须通过脚本(通常是JavaScript)来完成;开发者可利用多种js方法来在canvas中绘制路径、盒、圆、字符以及添加图像等。

html5中不支持的标签有哪些html5中不支持的标签有哪些Mar 17, 2022 pm 05:43 PM

html5中不支持的标签有:1、acronym,用于定义首字母缩写,可用abbr替代;2、basefont,可利用css样式替代;3、applet,可用object替代;4、dir,定义目录列表,可用ul替代;5、big,定义大号文本等等。

html5废弃了哪个列表标签html5废弃了哪个列表标签Jun 01, 2022 pm 06:32 PM

html5废弃了dir列表标签。dir标签被用来定义目录列表,一般和li标签配合使用,在dir标签对中通过li标签来设置列表项,语法“<dir><li>列表项值</li>...</dir>”。HTML5已经不支持dir,可使用ul标签取代。

html5是什么意思html5是什么意思Apr 26, 2021 pm 03:02 PM

html5是指超文本标记语言(HTML)的第五次重大修改,即第5代HTML。HTML5是Web中核心语言HTML的规范,用户使用任何手段进行网页浏览时看到的内容原本都是HTML格式的,在浏览器中通过一些技术处理将其转换成为了可识别的信息。HTML5由不同的技术构成,其在互联网中得到了非常广泛的应用,提供更多增强网络应用的标准机。

Html5怎么取消td边框Html5怎么取消td边框May 18, 2022 pm 06:57 PM

3种取消方法:1、给td元素添加“border:none”无边框样式即可,语法“td{border:none}”。2、给td元素添加“border:0”样式,语法“td{border:0;}”,将td边框的宽度设置为0即可。3、给td元素添加“border:transparent”样式,语法“td{border:transparent;}”,将td边框的颜色设置为透明即可。

See all articles

핫 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를 무료로 생성하십시오.

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기