이 글에서는 주로 클리핑 영역(클립 영역), 레이어링, 합성, 변형(회전, 크기 조정) 기능 적용 방법에 대해 설명합니다. 먼저 다음 단계를 모두 구현하는 기본 코드 세그먼트를 게시하세요.
Base Code <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script type="text/javascript" src="modernizr-latest.js"></script> <script type="text/javascript"> window.addEventListener("load", eventWindowLoaded, false); var Debugger = function() {}; Debugger.log = function(message) { try { console.log(message); } catch (exception) { return; } } function eventWindowLoaded() { canvasApp(); } function canvasSupport() { return Modernizr.canvas; } function canvasApp() { //是否支持CANVAS判断 if(!canvasSupport()) { return; } //取Canvas var theCanvas = document.getElementById("canvasOne"); //获取绘图环境 contextvar context = theCanvas.getContext("2d"); //绘图方法的实现 function drawScreen() {} //绘图方法调用执行 drawScreen(); } </script> </head> <body> <div style="position: absolute; top: 50px; left: 50px; border:1px solid #0000ff"> <canvas id="canvasOne" width="550" height="400"> Your browser does not support HTML5 Canvas. </canvas> </div> </body> </html>
다음의 경우 모든 예제 코드를 보려면 위의 drawScreen() 함수를 바꾸세요! 클립 영역 클리핑 영역
클립 영역에서는 다음을 사용합니다. .save 및 .restore는 현재 도면 상태
를 스택에 푸시하고스택에서 복원하는 데 사용됩니다. 이전 도면 상태를 확인하려면 .save를 사용하세요. 자르기
잘라낼 영역의 위치를 결정하려면 context.lect()를 사용하세요.
context.clip()을 사용하세요. 자르기 작업을 수행합니다.
캔버스에 그릴 때 잘린 영역의 그래픽만 표시할 수 있습니다.
context.restore( ) 잘린 영역으로 복원하기 자르기 전 상태
function drawScreen() { context.fillStyle = "black"; context.fillRect(0, 0, 200, 200); context.save(); //clip the canvas to a 50×50 square starting at 0,0 context.rect(0, 0, 100, 100); context.clip(); //red circle context.beginPath(); context.strokeStyle = "red"; context.lineWidth = 5; context.arc(100, 100, 100, (Math.PI/180)*0, (Math.PI/180)*360, false); //full circle context.stroke(); context.closePath(); context.restore(); //reclip to the entire canvas context.rect(0, 0, 300, 300); context.clip(); //draw a blue line that is not clipped context.beginPath(); context.strokeStyle = "blue"; //need list of available colors context.lineWidth = 5; context.arc(100, 100, 50, (Math.PI/180)*0, (Math.PI/180)*360, false); //full circle context.stroke(); context.closePath(); }
렌더링 예:
합성
캔버스에서 그래픽 합성이란 캔버스에서 그래픽의 투명도와 레이어 효과를 더 잘 처리하는 것을 말합니다.
캔버스에는 두 가지 중요한 것이 있습니다. 합성 작업 속성을 먼저 알아봅시다: globalAlpha 및 globalCompositeOperation
globalAlpha: Canvas의 투명도를 나타내며 기본값은 1.0, 범위는 [0.0-1.0];
globalCompositeOperation: "알파" 및 "변환"이 적용된 여러 그래픽을 캔버스에 그리는 방법.
총 11가지 유형이 있습니다: 복사 대상-atopdestination-indestination-outdestination-over 라이터 소스-atopsource-insource-outsource-overxor
이 11가지 유형 중 "source"와 "destination"이라는 두 가지 특수 단어가 있습니다.
"source": 캔버스에 그릴 그래픽(새 그래픽)
"destination": 현재 캔버스에 표시된 그래픽(이전 그래픽)
copy: 새 그래픽이 유지, 나머지는 모두 삭제됨
-
destination-atop : 새 그래픽과 기존 그래픽을 겹치는 부분으로 표시하는 것과 기존 그래픽(겹치는 부분)을 의미함 상위 레이어에 표시됩니다
-
destination-in: 기존 그래픽과 겹치는 부분만 표시하는 그래픽을 말합니다
-
destination-out : 기존 그래픽에서 겹치지 않는 부분만 표시하는 그래픽을 말합니다.
-
destination-over : 기존 그래픽과 새 그래픽을 모두 표시하고, 기존 그래픽을 상위 레이어에 표시하는 것을 말합니다
-
lighter: 기존 그래픽과 새 그래픽을 모두 표시하고, 기존 그래픽과 새 그래픽이 겹치는 부분에 색상을 지정합니다
source-atop:指显示旧图表与重叠部分的新图形,新图形(重叠部分)显示在上层
source-in:指只显示新图形重叠部分的图形
source-out:指只显示新图形中不重叠部分的图形
source-over:指新旧图形都显示,新图形显示在上层
xor:指新旧图形都显示,新旧图形重叠的部分会变成透明。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>test</title> <script type="text/javascript" src="../script/modernizr-latest.js"></script> <script type="text/javascript"> window.addEventListener("load", eventWindowLoaded, ); Debugger = () { }; Debugger.log = (message) { { console.log(message); } (exception) { ; } } eventWindowLoaded() { canvasApp(); } canvasSupport() { Modernizr.canvas; } canvasApp() { (!canvasSupport()) { ; } drawScreen(compositing, num) { name = "c" + num; theCanvas = document.getElementById(name); theCanvas.width=100; theCanvas.height=100; context = theCanvas.getContext("2d"); context.fillStyle = "blue"; context.fillRect(10, 10, 50, 50); context.globalCompositeOperation = compositing; context.fillStyle = "red"; context.fillRect(30, 30, 50, 50); } drawScreen("copy", 1); drawScreen("destination-atop", 2); drawScreen("destination-in", 3); drawScreen("destination-out", 4); drawScreen("destination-over", 5); drawScreen("lighter", 6); drawScreen("source-atop", 7); drawScreen("source-in", 8); drawScreen("source-out", 9); drawScreen("source-over", 10); drawScreen("xor", 11); } </script> <style> td { border: 1px solid #000000; } </style> </head> <body> <p style="position: absolute; top: 50px; left: 50px; border:1px solid #0000ff"> <table> <tr> <td><canvas id="c1"></canvas></td> <td><canvas id="c2"></canvas></td> <td><canvas id="c3"></canvas></td> <td><canvas id="c4"></canvas></td> <td><canvas id="c5"></canvas></td> </tr> <tr> <td><canvas id="c6"></canvas></td> <td><canvas id="c7"></canvas></td> <td><canvas id="c8"></canvas></td> <td><canvas id="c9"></canvas></td> <td><canvas id="c10"></canvas></td> <td><canvas id="c11"></canvas></td> </tr> </table> </p> </body> </html>
实例效果图:从左到右、从上到下,分别表示1,2,……11,这11种类型生成的效果图
Transformations 变换
变换的本质就是指从数学(矩阵)的角度来调整图形的物理属性;当然,这是原理;我们在实现的时候,只需要调用方法即可;
移动translate、旋转rotation 、缩放scale 、变换transforms
Transformations are applied to shapes and paths drawn after the setTransform() or other transformation function is called
只有在应用context.setTransform()方法后,对图形的各种变换才能生效;
实例:
function drawScreen() { context.fillStyle = "blue"; context.fillRect(210,210,50,50); context.setTransform(1,0,0,1,0,0);//启动变换 var angleInRadians = 45 * Math.PI / 180; context.rotate(angleInRadians);//旋转(参数为弧度) context.fillStyle = "red"; context.fillRect(0,0,200,200); }
效果如图:
蓝色的box并没有发生旋转;红的box是以Canvas的原点为中心顺时针旋转了45度(为何没有以红色box中心为原点旋转呢?);
Canvas的旋转原点,默认为Canvas的坐标系的(0,0)点,若不进行原点平移就旋转,自然是像整个画布做了旋转;
We must “translate” the point of origin to the center of our shape to rotate it around its own center
我们必须通地context.translate()方法来平移原点,才能按绘制的图形中心来旋转图形自身;
平移原理:
实例:
translate function drawScreen() { context.fillStyle = "blue"; context.fillRect(210,210,50,50); context.setTransform(1,0,0,1,0,0); var angleInRadians = 45 * Math.PI / 180; var x = 0; var y = 0; var width = 200; var height = 200; context.translate(x+.5*width, y+.5*height);//平移 context.rotate(angleInRadians); context.fillStyle = "red"; context.fillRect(-.5*width,-.5*height , width, height); }
效果图:
context.scale()实现图形的缩放,
此方法有两个参数: 一个是对X轴方向的缩放,一个是对Y轴方向的缩放,正常的图形参数默认都为1;
例如,我们要对图形放大两倍,则使用context.scale(2,2);
以(25,25)为顶点,长宽为50的正方形,放大2倍 function drawScreen() { context.fillStyle = "blue"; context.fillRect(0, 0, 50, 50); context.fillRect(150, 50, 50, 50); context.fillRect(50, 150, 50, 50); context.setTransform(1, 0, 0, 1, 0, 0); context.scale(2, 2); context.fillStyle = "red"; context.fillRect(25, 25, 50, 50); }
效果图:
scale与ratation也存在相似问题,就是原点的问题;
如果我们在变换前不进行原点的平移的话,scale功能默认的原点也是canvas的原点;
相当于对整个画布进行scale 默认是延x轴正向(left),y轴正向进行缩放(down);
如果想图形依然在原来的位置,从图形的中心位置进行scale,就需要先进行原点的平移context.translate();
以(25,25)为顶点,长宽为50的正方形,为其中心为原点,放大二倍
以(25,25)为顶点,长宽为50的正方形,为其中心为原点,放大二倍 function drawScreen() { context.setTransform(1, 0, 0, 1, 0, 0); var x = 25; var y = 25; var width = 50; var height = 50; context.translate(x + .5 * width, y + .5 * height); context.scale(2, 2); context.fillStyle = "red"; context.fillRect(-.5 * width, -.5 * height, width, height); }
위 내용은 html5 Canvas 그리기 샘플 코드에 대한 자세한 설명(2)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

microdatainhtml5enhancesseoanduserexperiencebyprovidingstructureddatatosearchengines.1) useitemscope, itemtype, anditempropattriptomArkContentlikeProductSorevents.2) testMicrodataWithTools likeSgoogle'sStructureddatestStingStingStingStingSugingjson-ld

html5introducesnewinpestenhanceuserexperience, simplifydevelopment 및 improveAcessibility.1) 자동 ValidatesEmailformat.2) andsimplifydateandtimeinputs, retgenedforcustomsolutions.

H5는 HTML의 다섯 번째 버전 인 HTML5입니다. HTML5는 웹 페이지의 표현력과 상호 작용성을 향상시키고 시맨틱 태그, 멀티미디어 지원, 오프라인 스토리지 및 캔버스 드로잉과 같은 새로운 기능을 소개하며 웹 기술 개발을 촉진합니다.

웹 사이트에는 접근성 및 네트워크 표준 준수가 필수적입니다. 1) 접근성은 모든 사용자가 웹 사이트에 동등하게 액세스 할 수 있도록 보장합니다. 2) 네트워크 표준은 웹 사이트의 접근성 및 일관성을 향상시키기 위해, 3) 접근성은 시맨틱 HTML, 키보드 내비게이션, 색상 대비 및 대체 텍스트를 사용해야합니다.

HTML의 H5 태그는 작은 타이틀 또는 하위 타이틀을 태그하는 데 사용되는 5 레벨 타이틀입니다. 1) H5 태그는 컨텐츠 계층을 개선하고 가독성과 SEO를 개선하는 데 도움이됩니다. 2) CSS와 결합하여 스타일을 사용자 정의하여 시각적 효과를 향상시킬 수 있습니다. 3) 학대를 피하고 논리적 컨텐츠 구조를 보장하기 위해 H5 태그를 합리적으로 사용하십시오.

HTML5에서 웹 사이트를 구축하는 방법에는 다음이 포함됩니다. 1. 의미 태그를 사용하여 웹 페이지 구조를 정의하는 등; 2. 멀티미디어 컨텐츠, 사용 및 태그를 포함; 3. 양식 검증 및 로컬 스토리지와 같은 고급 기능을 적용하십시오. 이 단계를 통해 명확한 구조와 풍부한 기능을 갖춘 최신 웹 페이지를 만들 수 있습니다.

합리적인 H5 코드 구조를 사용하면 페이지가 많은 컨텐츠 중에서 눈에 띄게 나타납니다. 1) 구조를 명확하게하기 위해 컨텐츠를 구성하려면 시맨틱 레이블 등을 사용하십시오. 2) Flexbox 또는 그리드와 같은 CSS 레이아웃을 통해 다른 장치에 대한 페이지의 렌더링 효과를 제어하십시오. 3) 반응 형 디자인을 구현하여 페이지가 다른 화면 크기에 맞게 조정되도록하십시오.

HTML5 (H5)와 이전 버전의 HTML의 주요 차이점은 다음과 같습니다. 1) H5는 시맨틱 태그를 소개하고, 2) 멀티미디어 컨텐츠를 지원하며 3) 오프라인 스토리지 기능을 제공합니다. H5는 새로운 태그 및 API (예 : 및 태그)를 통해 웹 페이지의 기능과 표현성을 향상시켜 사용자 경험 및 SEO 효과를 향상 시키지만 호환성 문제에주의를 기울여야합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

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

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경