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

HTML5 Canvas API 프로그래밍 _html5 튜토리얼 기술

WBOY
풀어 주다: 2016-05-16 15:49:43
원래의
1255명이 탐색했습니다.


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



캔버스 가입


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

//캔버스 요소 가져오기 및 그리기 컨텍스트 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();

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿