찾다
웹 프론트엔드H5 튜토리얼html5 캔버스 그리기 튜토리얼(2) - 직선 그리기 및 색상/끝점/교차점 등 선 스타일 설정_html5 튜토리얼 기술

아직 캔버스가 무엇인지 모르신다면 이전 글 을 읽어보세요. 캔버스에서도 마찬가지입니다. 시작하기 전에 캔버스와 브러시를 꺼냅니다.



코드 복사코드는 다음과 같습니다. :
var cvs = document.getElementById('cvs'); // 캔버스
var ctx = cvs.getContext('2d'); // 브러시


그려보자 글을 쓸 때 시작점은 정해져 있지 않고 언제든지 바뀔 수 있습니다. Canvas에서는 필기점을 직접 결정하지 않지만 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.Stroke(); 당신은 선을 볼 수 있습니다. 물론 수백 개의 경로를 연속으로 그린 ​​다음 스트로크 동작을 수행하여 수백 개의 선을 한 번에 그릴 수도 있습니다. 이제 4개의 선으로 직사각형을 그려보겠습니다.



코드를 복사하세요. 코드는 다음과 같습니다.
ctx.moveTo(100,100);
ctx.lineTo(200,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 캔버스 그리기 튜토리얼(2) - 직선 그리기 및 색상/끝점/교차점 등 선 스타일 설정_html5 튜토리얼 기술


따라서 따라하면 선의 절반은 바깥쪽에 있고 절반은 안쪽에 있습니다. 즉, 위 직사각형의 전체 너비는 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.moveTo(100,100);
ctx.lineTo(200,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에는 그림 6과 같이 miter(기본값, 날카로운 모서리), bevel(베벨), round(둥근 모서리)의 세 가지 속성이 있습니다.

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

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

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

축하합니다. 버그가 아닌 버그가 발생했습니다. 이것은 매우 특별합니다. 다음 기사에서 이에 대해 이야기하겠습니다.
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Vue和Canvas:如何实现手写签名和手势识别功能Vue和Canvas:如何实现手写签名和手势识别功能Jul 18, 2023 am 08:49 AM

Vue和Canvas:如何实现手写签名和手势识别功能引言:手写签名和手势识别功能在现代应用程序中越来越常见,它们可以为用户提供更加直观和自然的交互方式。Vue.js作为一款流行的前端框架,搭配Canvas元素可以实现这两个功能。本文将介绍如何使用Vue.js和Canvas元素来实现手写签名和手势识别功能,并给出相应的代码示例。一、手写签名功能实现要实现手写签

Canvas的优势有哪些Canvas的优势有哪些Aug 17, 2023 pm 04:52 PM

canvas的优势有强大的绘图功能、高性能、跨平台兼容性、支持多种图形格式、可以与其他Web技术集成、可以实现动态效果和可以实现复杂的图像处理。详细介绍:1、Canvas提供了丰富的绘图功能,可以绘制各种形状、线条、文本、图像等;2、Canvas在浏览器中直接操作像素,因此具有很高的性能;3、Canvas是基于HTML5标准的一部分,可以在各种现代浏览器上运行等等。

如何利用Vue和Canvas创建逼真的天气动态背景如何利用Vue和Canvas创建逼真的天气动态背景Jul 17, 2023 am 08:33 AM

如何利用Vue和Canvas创建逼真的天气动态背景引言:在现代网页设计中,动态背景效果是吸引用户眼球的重要元素之一。本文将介绍如何利用Vue和Canvas技术来创建一个逼真的天气动态背景效果。通过代码示例,你将学习如何编写Vue组件和利用Canvas绘制不同天气场景,从而实现一个独特而吸引人的背景效果。步骤一:创建Vue项目首先,我们需要创建一个Vue项目。

canvas插件有哪些canvas插件有哪些Aug 17, 2023 pm 05:00 PM

canvas插件有Fabric.js、EaselJS、Konva.js、Three.js、Paper.js、Chart.js和Phaser。详细介绍:1、Fabric.js 是一个基于Canvas的开源 JavaScript 库,它提供了一些强大的功能;2、EaselJS是CreateJS库中的一个模块,它提供了一套简化了Canvas编程的API;3、Konva.js等等。

Vue和Canvas:如何实现视频播放器的定制化界面Vue和Canvas:如何实现视频播放器的定制化界面Jul 18, 2023 pm 02:49 PM

Vue和Canvas:如何实现视频播放器的定制化界面引言:在现代互联网时代,视频已经成为人们生活中必不可少的一部分。为了提供良好的用户体验,许多网站和应用程序都提供了自定义的视频播放器界面。本文将介绍如何使用Vue和Canvas技术实现一个定制化的视频播放器界面。一、前期准备在开始之前,您需要确保您已经安装了Vue和Canvas,并且熟悉这两种技术的基本用法

Vue和Canvas:如何实现图片的马赛克效果Vue和Canvas:如何实现图片的马赛克效果Jul 16, 2023 pm 10:17 PM

Vue和Canvas:如何实现图片的马赛克效果引言:随着Web技术的不断发展,越来越多的人开始使用Vue框架来构建交互式的前端应用。而在前端开发中,常常需要为用户提供图片处理的功能。本文将介绍如何利用Vue和Canvas实现图片的马赛克效果,为用户带来更好的视觉体验。一、马赛克效果概述马赛克效果是一种将图像的细节部分进行像素化处理,使得整个图像变得模糊和抽象

如何使用Vue和Canvas开发网页截图工具如何使用Vue和Canvas开发网页截图工具Jul 19, 2023 am 08:36 AM

如何使用Vue和Canvas开发网页截图工具简介:随着互联网的发展,网页截图工具在我们的日常生活中扮演着越来越重要的角色。它们可以用来捕捉网页上的信息、制作教程或者分享你的见解。本文将介绍如何使用Vue和Canvas来开发一个简单的网页截图工具,以帮助读者了解如何实现这个常见但又有趣的功能。准备工作:在开始之前,我们需要准备好以下的开发环境和工具:安装Nod

canvas引擎有哪些canvas引擎有哪些Aug 17, 2023 pm 05:29 PM

canvas引擎有Three.js、Pixi.js、EaselJS、Konva.js、Paper.js等。详细介绍:1、Pixi.js,提供了简单易用的API,支持精灵、纹理、滤镜等功能,同时还提供了丰富的工具和插件,方便开发者进行交互、动画和优化等操作;2、Pixi.js,提供了简单易用的API,支持精灵、纹理、滤镜等功能,还提供了丰富的工具和插件;3、EaselJS等等。

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

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경