찾다
웹 프론트엔드H5 튜토리얼html5 Canvas는 직선 그리기 및 선 스타일 설정을 구현합니다.

이 글은 HTML5 Canvas에서 직선을 그리는 방법과 선 스타일을 설정하는 방법을 주로 소개합니다. 참고할 만한 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있도록 공유합니다.

그림을 배울 때 가장 기본적인 것은 선입니다. , 선의 연결은 어떤 모양이든 만들 수 있습니다. 다음으로는 가장 간단한 선 그리기 방법을 자세히 소개하겠습니다. 아직 캔버스가 무엇인지 모르신다면 이전 글을 읽어보세요.
그림을 배울 때 선이 가장 기본이고 선의 연결이 모든 그래픽을 형성할 수 있습니다. 캔버스에서도 마찬가지입니다.
시작하기 전에 캔버스와 브러시를 꺼냅니다.

var cvs = document.getElementById('cvs'); //画布 
var ctx = cvs.getContext('2d'); // 画笔

그림을 그릴 때 시작점은 고정되어 있지 않고 언제든지 바뀔 수 있습니다. 캔버스에서는 필기 지점을 직접 결정하지 않지만 moveTo라는 방법이 있습니다. moveTo의 기능은 펜촉을 캔버스에서 들어 올려 지정된 지점(예: 좌표)으로 이동하는 것과 같습니다.

ctx.moveTo(x,y)

이 과정에서는 그래픽이 그려지지 않습니다. 이는 캔버스에 펜을 대고 있는 것과 같습니다.
하지만 여기저기 돌아다녀도 소용없어요. 그리기 시작해야 해요. 가장 간단한 것을 먼저 그립니다: 직선
직선을 그리는 방법은 lineTo입니다. 해당 매개변수는 점인 moveTo와 동일합니다.
ctx.lineTo(x,y) 물론 선을 그리면 쓰기 지점도 이동하므로 lineTo 이후에는 쓰기 지점이 목표 지점이 됩니다.

ctx.moveTo(100,100); 
ctx.lineTo(200,100);

이때 웹페이지를 새로고침하면 캔버스에 예상한 선도 없고 아무것도 없는 것을 확인할 수 있습니다. 한 단계가 누락되었기 때문에 lineTo는 실제로 그 자체로 보이지 않는 "경로"입니다. 표시하려면 "그려"야 합니다.
PS를 사용해 본 학생들은 두 가지 그래픽 모드, 즉 채우기 모드와 획 모드를 확실히 알고 있을 것입니다. 이제 선을 그렸으므로 PS에서 경로를 그리는 것과 같습니다. 이때 경로의 가장자리를 그릴 수 있으며 그래픽이 표시됩니다.
캔버스 스트로크 방법은 스트로크()입니다. 이제 코드를 완성해 보겠습니다.

ctx.moveTo(100,100); 
ctx.lineTo(200,100);

ctx.스트로크() 이때 새로고침하면 선이 표시됩니다. 물론 수백 개의 경로를 연속으로 그린 ​​다음 스트로크 동작을 수행하여 수백 개의 선을 한 번에 그릴 수도 있습니다. 이제 4개의 선으로 직사각형을 그려 보겠습니다.

ctx.moveTo(100,100); 
ctx.lineTo(200,100); 
ctx.lineTo(200,200); 
ctx.lineTo(100,200); 
ctx.lineTo(100,100); 
ctx.stroke();

여기에서는 먼저 전체 경로를 그린 다음 한 번에 모두 획을 그립니다.
———작가의 불만: 캔버스 그리기의 한 가지 단점은 기본적으로 추측에 기반을 두고 있다는 점이며, 이는 매우 직관적이지 않습니다.
중요 알림: 캔버스 그리기 프로세스(예: 채우기 및 스트로크)는 리소스를 많이 소모합니다. 시스템 리소스를 절약하고 효율성을 높이려면 모든 경로를 그린 다음 그래픽을 한 번에 채우거나 스트로크하는 것이 가장 좋습니다.
위 그래픽을 보면 기본 선 굵기가 1px이고 선 색상이 검은색임을 알 수 있습니다. 물론 설정할 수 있지만 이상한 점은 선 너비를 설정하는 것이 lineWidth인데 선 스타일을 설정하는 것을 스트로크 스타일이라고 한다는 것입니다. 나도 모른다. :

ctx.lineWidth = 10; 
ctx.strokeStyle = 'rgba(255,0,0,0.5)';

위 코드는 선 너비를 10px로 설정하고 선 색상을 반투명 빨간색으로 설정합니다.

그림 1과 같이 새로고침해 보세요. 뭔가 잘못된 것 같습니다! 왼쪽 상단 모서리에 작은 조각이 누락된 이유는 무엇입니까? 이것은 환상이 아닙니다. 그 이유는 캔버스의 선 그리기 방식에서 시작된다.
질문: 내가 그리는 직사각형 경로의 너비와 높이가 100이고 옆선 너비가 10픽셀인 경우 측면이 그려진 직사각형의 전체 너비와 높이는 얼마입니까? 100+10*2=120인가요?
가장자리가 경로 바깥쪽으로 완전히 그려지면 120입니다. 하지만 캔버스는 그렇지 않습니다. 캔버스의 모든 선에는 선의 절대 중앙에 위치한 "중간선"이 있습니다. 선의 획은 중심선에서 양쪽으로 확장됩니다. 예를 들어, 선 너비가 1이면 중심선은 0.5이고, 너비가 5이면 중심선은 2.5입니다. 캔버스 그래픽을 스트로크하면 경로가 선의 중심선에 정렬된 다음 스트로크됩니다. 그림 2와 같이:

html5 Canvas는 직선 그리기 및 선 스타일 설정을 구현합니다.

그래서 추적할 때 선의 절반은 외부에 있고 절반은 내부에 있습니다. 즉, 위 직사각형의 전체 너비는 100+(10/2)입니다. *2, 110과 같습니다.
도 맞습니다. 따라서 왼쪽 상단에 누락된 모서리가 있는 것은 당연합니다. 여기에는 아무도 그림을 그리지 않으니까요.
그런데 나머지 모서리는 왜 깨지지 않나요? 사진 네 귀퉁이에 틈이 있는 것 같지 않나요?
선을 그릴 때 브러시를 "들어 올리지" 않았기 때문입니다. 즉, 브러시가 연속적으로 움직이지 않았기 때문입니다. 믿기지 않는다면 이제 moveTo를 해보자:

ctx.moveTo(100,100); 
ctx.lineTo(200,100); 
ctx.moveTo(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.moveTo(100,100); 
ctx.lineTo(200,100); 
ctx.lineTo(200,200); 
ctx.lineTo(100,200); 
ctx.lineTo(100,100); 
ctx.closePath();//闭合路径 
ctx.lineWidth = 10; 
ctx.strokeStyle = 'rgba(255,0,0,0.5)'; 
ctx.stroke();

此时刷新,就是一个完美的正方形了。图4:

无论我们把线条改到多粗————越粗越有人喜欢是吧?————这个四方形的四个角都是规矩的直角,不会出现圆滑的情况。圆滑的角是什么情况?请看PS中的四方形描边,图5:

看到了吧,越粗的边线,他的角的圆弧越大。
如果我想Canvas里面的边线也和PS这种一样,有没有办法呢?当然有,就是lineJoin属性。
lineJoin,意思即线的交汇处,有3个属性:miter(默认,尖角),bevel(斜角),round(圆角),如图6:
 
毫无疑问我们一下就能明白我们的矩形用的是尖角,所以试着把他改成圆角看看:
图形变成了这样,图7:
 
有点像PS的了吧?
另外,通过前面图我们了解到,Canvas的线条两端是平的,可不可以改呢?毕竟平的不好看。
也是可以的,即lineCap属性,这个就是定义线条的端点。lineCap有3个值:butt(平,默认),round(圆),square(方),如图8
 
看图就能发现,其实平头跟方头是一样的,区别只是平头没有伸出去那么一截。圆头和方头都会伸出去一截,这一节是多长呢?就是线条宽度的一半。
你有没有想到什么?哈哈,前面的闭合路径的问题,如果我们把lineCap设为方头,效果也是一样的!
但为了保险起见,我们还是要把路径闭合了,切记!
我还要提醒一下:闭合的路径没有端点!所以闭合的路径上看不到端点的样式。
另外:lineCap与lineJoin有点相似,注意不要搞混。
如果你眼尖并且运气不好,你可能会发现有时候1像素的线条不是1像素宽,好像要宽一些,模糊一些。如图9:

恭喜你!你遇到了一个不是bug的bug。这个很特别,我把他放到下一篇文章讲吧

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

HTML5 Canvas渐进填充与透明实现图像的Mask效果

위 내용은 html5 Canvas는 직선 그리기 및 선 스타일 설정을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

HTML5의 핵심 기능에는 시맨틱 태그, 멀티미디어 지원, 오프라인 저장 및 로컬 스토리지 및 형태 향상이 포함됩니다. 1. 코드 가독성 및 SEO 효과를 향상시키는 시맨틱 태그 등. 2. 레이블로 멀티미디어 임베딩을 단순화하십시오. 3. ApplicationCache 및 LocalStorage와 같은 오프라인 스토리지 및 로컬 스토리지는 네트워크없는 작동 및 데이터 저장을 지원합니다. 4. 양식 향상은 처리 및 검증을 단순화하기 위해 새로운 입력 유형 및 검증 속성을 도입합니다.

H5 코드 예제 : 실제 응용 프로그램 및 튜토리얼H5 코드 예제 : 실제 응용 프로그램 및 튜토리얼Apr 25, 2025 am 12:10 AM

H5는 다양한 새로운 기능과 기능을 제공하여 프론트 엔드 개발 기능을 크게 향상시킵니다. 1. 멀티미디어 지원 : 미디어를 포함하고 요소를 포함하여 플러그인이 필요하지 않습니다. 2. 캔버스 : 요소를 사용하여 2D 그래픽 및 애니메이션을 동적으로 렌더링합니다. 3. 로컬 스토리지 : LocalStorage 및 SessionStorage를 통해 지속적인 데이터 저장을 구현하여 사용자 경험을 향상시킵니다.

H5와 HTML5 사이의 연결 : 유사성과 차이H5와 HTML5 사이의 연결 : 유사성과 차이Apr 24, 2025 am 12:01 AM

H5 및 HTML5는 다른 개념입니다. HTML5는 새로운 요소 및 API를 포함하는 HTML의 버전입니다. H5는 HTML5를 기반으로 한 모바일 애플리케이션 개발 프레임 워크입니다. HTML5는 브라우저를 통해 코드를 구문 분석하고 렌더링하는 반면 H5 응용 프로그램은 컨테이너를 실행하고 JavaScript를 통해 기본 코드와 상호 작용해야합니다.

H5 코드의 빌딩 블록 : 주요 요소 및 그 목적H5 코드의 빌딩 블록 : 주요 요소 및 그 목적Apr 23, 2025 am 12:09 AM

HTML5의 주요 요소에는 최신 웹 페이지를 작성하는 데 사용되는 ,,,,, 등이 포함됩니다. 1. 헤드 컨텐츠 정의, 2. 링크를 탐색하는 데 사용됩니다. 3. 독립 기사의 내용을 나타내고, 4. 페이지 내용을 구성하고, 5. 사이드 바 컨텐츠 표시, 6. 바닥 글을 정의하면, 이러한 요소는 웹 페이지의 구조와 기능을 향상시킵니다.

HTML5 및 H5 : 일반적인 사용법 이해HTML5 및 H5 : 일반적인 사용법 이해Apr 22, 2025 am 12:01 AM

HTML5와 H5 사이에는 차이가 없으며, 이는 HTML5의 약어입니다. 1.HTML5는 HTML의 다섯 번째 버전으로 웹 페이지의 멀티미디어 및 대화식 기능을 향상시킵니다. 2.H5는 종종 HTML5 기반 모바일 웹 페이지 또는 응용 프로그램을 참조하는 데 사용되며 다양한 모바일 장치에 적합합니다.

HTML5 : 현대 웹의 빌딩 블록 (H5)HTML5 : 현대 웹의 빌딩 블록 (H5)Apr 21, 2025 am 12:05 AM

HTML5는 W3C에 의해 표준화 된 하이퍼 텍스트 마크 업 언어의 최신 버전입니다. HTML5는 새로운 시맨틱 태그, 멀티미디어 지원 및 양식 향상을 도입하여 웹 구조, 사용자 경험 및 SEO 효과를 개선합니다. HTML5는 웹 페이지 구조를 더 명확하게하고 SEO 효과를 더 좋게하기 위해, 등 등과 같은 새로운 시맨틱 태그를 소개합니다. HTML5는 멀티미디어 요소를 지원하며 타사 플러그인이 필요하지 않으므로 사용자 경험을 향상시키고 속도를로드합니다. HTML5는 양식 함수를 향상시키고 사용자 경험을 향상시키고 양식 검증 효율성을 향상시키는 새로운 입력 유형을 도입합니다.

H5 코드 : 깨끗하고 효율적인 html5 작성H5 코드 : 깨끗하고 효율적인 html5 작성Apr 20, 2025 am 12:06 AM

깨끗하고 효율적인 HTML5 코드를 작성하는 방법은 무엇입니까? 답은 태그, 구조화 된 코드, 성능 최적화 및 일반적인 실수를 피함으로써 일반적인 실수를 피하는 것입니다. 1. 코드 가독성 및 SEO 효과를 향상시키기 위해 시맨틱 태그 등을 사용하십시오. 2. 적절한 계약과 의견을 사용하여 코드를 구성하고 읽을 수 있도록하십시오. 3. CDN 및 압축 코드를 사용하여 불필요한 태그를 줄임으로써 성능을 최적화합니다. 4. 태그가 닫히지 않은 것과 같은 일반적인 실수를 피하고 코드의 유효성을 확인하십시오.

H5 : 웹에서 사용자 경험을 향상시키는 방법H5 : 웹에서 사용자 경험을 향상시키는 방법Apr 19, 2025 am 12:08 AM

H5는 멀티미디어 지원, 오프라인 스토리지 및 성능 최적화로 웹 사용자 경험을 향상시킵니다. 1) 멀티미디어 지원 : H5 및 요소는 개발을 단순화하고 사용자 경험을 향상시킵니다. 2) 오프라인 스토리지 : WebStorage 및 IndexedDB는 오프라인으로 사용하여 경험을 향상시킵니다. 3) 성능 최적화 : 웹 워즈 및 요소는 성능을 최적화하여 대역폭 소비를 줄입니다.

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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

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

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는