html5 캔버스 그리기 튜토리얼(2) - 직선 그리기 및 색상/끝점/교차점 등 선 스타일 설정_html5 튜토리얼 기술
아직 캔버스가 무엇인지 모르신다면 이전 글 을 읽어보세요. 캔버스에서도 마찬가지입니다. 시작하기 전에 캔버스와 브러시를 꺼냅니다.
그려보자 글을 쓸 때 시작점은 정해져 있지 않고 언제든지 바뀔 수 있습니다. Canvas에서는 필기점을 직접 결정하지 않지만 moveTo라는 메소드가 있습니다. moveTo의 기능은 펜촉을 캔버스에서 들어 올려 지정된 지점(예: 좌표)으로 이동하는 것과 같습니다.
이 과정에서는 그래픽이 그려지지 않습니다. 이는 캔버스에 펜을 매달아 놓은 것과 같습니다.
직선을 그리는 방법은 lineTo이며, 해당 매개변수는 점인 moveTo와 동일합니다.
ctx.lineTo(x,y) 물론 선을 그리면 쓰기 지점도 이동하므로 lineTo 이후에는 쓰기 지점이 대상 지점이 됩니다.
웹페이지를 새로고침하면 캔버스에 예상되는 줄이 전혀 없다는 것을 알 수 있습니다. 한 단계가 누락되었기 때문에 lineTo는 실제로 그 자체로 보이지 않는 "경로"입니다. 우리가 그를 보여주기를 원한다면, 우리는 그를 "그려야" 합니다.
캔버스 스트로크 방법은 스트로크()입니다. 이제 코드를 완성해 보겠습니다.
ctx.Stroke(); 당신은 선을 볼 수 있습니다. 물론 수백 개의 경로를 연속으로 그린 다음 스트로크 동작을 수행하여 수백 개의 선을 한 번에 그릴 수도 있습니다. 이제 4개의 선으로 직사각형을 그려보겠습니다.
ctx.lineTo(100,100); ;
ctx.Stroke();
여기에서는 먼저 전체 경로를 그린 다음 한 번에 스트로크합니다.
——–작가의 불만: 캔버스 그리기의 한 가지 단점은 기본적으로 추측에 기반을 두고 있다는 점이며, 이는 매우 직관적이지 않습니다.
중요한 알림: 캔버스 그리기 프로세스(예: 채우기 및 스트로크)는 리소스를 많이 소모합니다. 시스템 리소스를 절약하고 효율성을 높이려면 모든 경로를 그린 다음 그래픽을 한 번에 채우거나 스트로크하는 것이 가장 좋습니다.
코드 복사
위 코드는 선 너비를 10px로 설정하고 선 색상을 반투명 빨간색으로 설정합니다.
질문: 내가 그리는 직사각형 경로의 너비와 높이가 100이고 옆선 너비가 10픽셀인 경우 측면을 그린 직사각형의 전체 너비와 높이는 얼마입니까? 100 10*2=120인가요?
가장자리가 경로 바깥쪽으로 완전히 그려지면 120이 됩니다. 하지만 캔버스는 그렇지 않습니다. 캔버스의 모든 선에는 선의 절대 중앙에 위치한 "중간선"이 있습니다. 선의 획은 중심선에서 양쪽으로 확장됩니다. 예를 들어, 선 너비가 1이면 중심선은 0.5이고, 너비가 5이면 중심선은 2.5입니다. 캔버스 그래픽을 스트로크하면 경로가 선의 중심선에 정렬된 다음 스트로크됩니다. 그림 2와 같이:
따라서 따라하면 선의 절반은 바깥쪽에 있고 절반은 안쪽에 있습니다. 즉, 위 직사각형의 전체 너비는 100(10/2)*2, 즉 110입니다.
이 때문에 왼쪽 상단 모서리 부분이 깨져 보이는 것은 자연스러운 현상입니다. 여기에는 아무도 그림을 그리지 않으니까요.
근데 왜 나머지 모서리에는 노치가 없나요? 사진 네 귀퉁이에 틈이 있는 것 같지 않나요?
선을 그릴 때 브러시를 '들어 올리지' 않았기 때문입니다. 즉, 브러시가 연속적으로 움직이지 않았기 때문입니다. 믿을 수 없다면 지금 이동하자:
ctx.moveTo(100,100);
ctx.lineTo(200,100); //여기에 주목하세요
ctx.lineTo(200,200); 🎜>ctx.lineTo(100,200);
ctx.lineTo(100,100);
ctx.lineWidth = 10;
ctx.StrokeStyle = 'rgba(255,0,0,0.5)'; >ctx.Stroke();
두 번째 선을 그리기 전에 moveTo를 옮겼는데, moveTo의 좌표는 변함이 없었는데, 새로고침을 하고 나니 그래프가 이렇게 됐네요. 사진3] :
알았나요? 우리가 펜을 들었기 때문이다. 이제 moveTo를 삭제하고 왼쪽 상단의 부족한 모서리를 어떻게 채울지 고민해 볼까요?
틀렸어요! 이렇게 하면 경로의 마지막 지점이 시작 지점과 일치하게 되지만 경로 자체는 닫히지 않습니다!
Canvas에서 경로를 닫는 방법은 무엇입니까? closePath()를 사용하세요.
ctx.lineWidth = 10;
ctx.StrokeStyle = 'rgba(255,0,0,0.5)'
ctx.Stroke(); >
이때 새로고침하면 완벽한 정사각형이 됩니다. 그림 4:
아무리 선을 굵게 만들어도 선이 두꺼울수록 좋아해주시는 분들이 많겠죠? ————이 사각형의 네 모퉁이는 직각이며 둥글지 않습니다. 둥근 모서리는 어떻습니까? PS의 사각형 획을 살펴보십시오. 그림 5:
보시다시피 가장자리가 두꺼울수록 모서리의 호가 더 커집니다.
Canvas의 가장자리를 PS의 가장자리와 동일하게 하려면 어떤 방법이 있나요? 물론 lineJoin 속성입니다.
선의 교차를 의미하는 lineJoin에는 그림 6과 같이 miter(기본값, 날카로운 모서리), bevel(베벨), round(둥근 모서리)의 세 가지 속성이 있습니다.

거기 직사각형의 모서리가 뾰족하다는 것을 즉시 이해할 수 있으므로 둥근 모서리로 변경해 보십시오.
그래픽은 다음과 같습니다. 그림 7:

PS와 약간 비슷합니다. , 오른쪽?
게다가 이전 사진을 보면 캔버스 선의 끝부분이 플랫한 것으로 알고 있는데, 이를 변경할 수 있나요? 결국 그것은 평평하고 좋아 보이지 않습니다.
도 가능합니다. 즉, 선의 끝점을 정의하는 lineCap 속성입니다. lineCap에는 그림 8과 같이 butt(플랫, 기본값), round(원), square(사각형)의 3가지 값이 있습니다.

실제로는 플랫 헤드인 것을 사진을 보면 알 수 있습니다. 그리고 스퀘어 헤드도 똑같습니다. 플랫 헤드가 별로 튀어나오지 않는다는 점만 다릅니다. 둥근 머리와 사각형 머리 모두 한동안 튀어나올 것입니다. 그것은 선 너비의 절반입니다.
생각해 본 적 있으신가요? 하하, 이전 닫힌 경로 문제의 경우 lineCap을 정사각형 머리로 설정하면 효과는 동일합니다!
하지만 안전을 위해 길을 막아야 한다는 점 기억해주세요!
또한 상기시켜 드리고 싶습니다. 닫힌 길에는 끝점이 없습니다! 따라서 닫힌 경로에서는 끝점 스타일을 볼 수 없습니다.
또한: lineCap은 lineJoin과 다소 유사하므로 혼동하지 않도록 주의하세요.
눈이 예리하고 운이 좋지 않다면 1픽셀 선이 1픽셀 너비가 아니고 더 넓고 흐릿하게 보일 수도 있습니다. 그림 9:

축하합니다. 버그가 아닌 버그가 발생했습니다. 이것은 매우 특별합니다. 다음 기사에서 이에 대해 이야기하겠습니다.

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











캔버스 화살표 플러그인에는 다음이 포함됩니다. 1. 간단하고 사용하기 쉬운 API가 있으며 사용자 정의 화살표 효과를 만들 수 있는 Fabric.js 2. 화살표 그리기 기능을 제공하고 다양한 화살표를 만들 수 있는 Konva.js 스타일 3. 풍부한 그래픽 처리 기능을 제공하고 다양한 화살표 효과를 얻을 수 있는 Pixi.js 4. 화살표 스타일과 애니메이션을 쉽게 생성하고 제어할 수 있는 Two.js 5. 다양한 화살표 효과를 생성할 수 있는 Arrow.js 6. 대략적인 .js, 손으로 그린 화살표 등을 만들 수 있습니다.

캔버스 시계의 세부 사항에는 시계 모양, 눈금 표시, 디지털 시계, 시, 분 및 초침, 중심점, 애니메이션 효과, 기타 스타일 등이 포함됩니다. 자세한 소개: 1. 시계 모양, 캔버스를 사용하여 시계 모양으로 원형 다이얼을 그릴 수 있으며 다이얼의 크기, 색상, 테두리 및 기타 스타일을 설정할 수 있습니다. 2. 눈금선, 눈금선을 그립니다. 3. 디지털 시계, 다이얼에 디지털 시계를 그려서 현재 시간과 분을 표시할 수 있습니다. 4. 시침, 분침, 초침 등.

html2canvas 버전에는 html2canvas v0.x, html2canvas v1.x 등이 포함됩니다. 자세한 소개: 1. html2canvas v0.x는 html2canvas의 초기 버전입니다. 최신 안정 버전은 v0.5.0-alpha1입니다. 2. html2canvas v1.x는 html2canvas의 새 버전입니다.

Canvas 프레임워크 탐색: 일반적으로 사용되는 Canvas 프레임워크가 무엇인지 이해하려면 특정 코드 예제가 필요합니다. 소개: Canvas는 풍부한 그래픽 및 애니메이션 효과를 얻을 수 있는 HTML5에서 제공되는 그리기 API입니다. 그리기의 효율성과 편의성을 향상시키기 위해 많은 개발자들이 다양한 Canvas 프레임워크를 개발했습니다. 이 기사에서는 일반적으로 사용되는 몇 가지 캔버스 프레임워크를 소개하고 독자가 이러한 프레임워크를 사용하는 방법을 더 깊이 이해하는 데 도움이 되는 특정 코드 예제를 제공합니다. 1. EaselJS 프레임워크 Ea

uniapp에서 캔버스를 사용하여 차트와 애니메이션 효과를 그리는 방법에는 특정 코드 예제가 필요합니다. 1. 소개 모바일 장치의 인기로 인해 점점 더 많은 응용 프로그램이 모바일 단말기에 다양한 차트와 애니메이션 효과를 표시해야 합니다. Vue.js를 기반으로 하는 크로스 플랫폼 개발 프레임워크인 uniapp은 캔버스를 사용하여 차트와 애니메이션 효과를 그리는 기능을 제공합니다. 이 기사에서는 uniapp이 캔버스를 사용하여 차트 및 애니메이션 효과를 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 2. 캔버스

tkinter 캔버스 속성에는 bg, bd, 릴리프, 너비, 높이, 커서, 강조 배경, 강조 색상, 강조 두께, 삽입 배경, 삽입 너비, 선택 배경, 선택 전경, xscrollcommand 속성 등이 포함됩니다. 자세한 소개

게임 개발에서 캔버스의 힘과 적용 이해 개요: 인터넷 기술의 급속한 발전으로 인해 웹 게임은 플레이어들 사이에서 점점 더 인기를 얻고 있습니다. 캔버스 기술은 웹 게임 개발의 중요한 부분으로 게임 개발에 점차 등장하며 강력한 위력과 활용성을 보여주고 있습니다. 이 기사에서는 게임 개발에서 캔버스의 잠재력을 소개하고 특정 코드 예제를 통해 캔버스의 적용을 보여줍니다. 1. 캔버스 기술 소개 캔버스는 HTML5의 새로운 요소입니다.

캔버스에 대한 마우스 좌표를 얻는 방법: 1. JavaScript 샘플 파일을 만듭니다. 2. Canvas 요소에 대한 참조를 가져오고 마우스 이동 이벤트에 대한 리스너를 추가합니다. 3. Canvas에서 마우스가 움직일 때 getMousePos 함수가 트리거됩니다. ; 4. "getBoundingClientRect()" 메소드를 사용하여 Canvas 요소의 위치 및 크기 정보를 얻고, event.clientX 및 event.clientY를 통해 마우스 좌표를 얻습니다.
