目次
3.绘制属性的设置
4.进行画布转换
ホームページ バックエンド開発 PHPチュートリアル HTMLでのキャンバスの用途は何ですか?

HTMLでのキャンバスの用途は何ですか?

Jun 13, 2016 am 11:56 AM
canvas html

HTMLでのキャンバスの用途は何ですか?

HTML5 の 要素は、JavaScript を使用してグラフィックを描画するためのシンプルかつ強力な方法を提供します。グラフィックの描画、写真の合成、または単純な (それほど単純ではない) アニメーションの実行に使用できます。

は、「width」と「height」という 2 つの特定の属性と、id、name、class などのすべてのコア HTML5 属性のみを備えた単純な要素です。

<canvas id = "mycanvas" width = "100" height = "100"></canvas>
ログイン後にコピー

次のように getElementById() メソッドを使用すると、DOM 内の 要素を簡単に見つけることができます。 🎜>

HTML5 での Canvas 要素の使用の概要
var canvas = document.getElementById("mycanvas");
ログイン後にコピー

Canvas は、開発者が描画をカスタマイズするためのインターフェイスを提供します。 getContext() 関数を使用して、描画操作の描画コンテキストを取得できます。この関数では 2 つのパラメータを渡すことができます。最初のパラメータは、より一般的に使用される「2d」です。webOpenGL を使用して 3D 描画を実装することもできます。このブログでは主に2D描画関連の手法をまとめています。

1. 単純なグラフィックを描画する

Canvas を使用してフラット グラフィックを描画するのは比較的簡単です。たとえば、次の関数を使用して、長方形の領域を直接描画できます。

グラフィック効果は次のとおりです:

は、fillRect を使用して塗りつぶされた四角形を描画します。たとえば、
		var c = document.getElementById("canvas");
		var context = c.getContext("2d");
		context.strokeRect(20,20,100,100);
ログイン後にコピー

効果は次のとおりです。

clearRect 関数を使用して、長方形の領域を消去します。例は次のとおりです。
		var c = document.getElementById("canvas");
		var context = c.getContext("2d");
		context.fillRect(20,20,100,100);
ログイン後にコピー

効果は次のとおりです。

グラフィックスを描画する上記の方法は、実際には複合関数であり、パスの定義と描画の 2 つのステップを完了します。グラフィック パスをカスタマイズすることもできます。例:
		var c = document.getElementById("canvas");
		var context = c.getContext("2d");
		context.strokeRect(20,20,100,100);
		context.clearRect(10,10,100,100);
ログイン後にコピー

効果は次のとおりです:

beginPath 関数はパスを開くために使用されます。を指定し、moveTo 関数を使用してブラシを移動します。 lineTo 関数を使用して線を定義します。線の開始点はブラシの現在位置であり、パラメーターは終了位置です。 closePath 関数はパスを閉じるために使用されます。もちろん、この関数を呼び出す必要はありません。閉じられていないグラフィックを描画することもできます。ストローク関数は定義されたグラフィックスを描画するために使用され、それに対応して塗りつぶしと描画を行うフィル関数があります。
		var c = document.getElementById("canvas");
		var context = c.getContext("2d");
		context.beginPath();
		context.moveTo(20,20);
		context.lineTo(20,100);
		context.lineTo(100,100);
		context.closePath();
		context.stroke();
ログイン後にコピー

quadraticCurveTo 関数と bezierCurveTo 関数は、それぞれ 2 次ベジェ曲線パスと 3 次ベジェ曲線パスを作成するために使用されます。例は次のとおりです。

効果は次のとおりです。

ベジェ曲線に関する関連コンテンツについては、ブログ
		context.moveTo(20,120);
		context.quadraticCurveTo(20,200,100,180);
		context.stroke();
		context.moveTo(20,200);
		context.bezierCurveTo(20,300,60,300,60,200);
		context.stroke();
ログイン後にコピー

https://my.oschina.net/u/2340880/blog/1519503 をご覧ください。

arc 関数は円弧を作成するために使用されます。例:

arc 関数では、最初の 2 つのパラメーターは円の中心点を設定し、3 番目のパラメーターは半径を設定します。 、4 番目のパラメータ、および 5 番目のパラメータは、ラジアンで表される円弧の開始点と終了点を設定します。最後のパラメータは、逆に描画するかどうかを設定するブール値です。次のように、2 つの接線の間に円弧を描くために使用される arcTo 関数もあります。

効果は以下のようになります。

        context.moveTo(110,350);
		context.arc(60,350,50,0,2*Math.PI,false);
		context.stroke();
ログイン後にコピー

を使用します。クリップ この関数はトリミング操作を実行できます。トリミング後は、トリミングされた領域内にのみ後続の描画を描画できます。その効果は次のとおりです。
		context.moveTo(20,420);
		context.arcTo(80,420,80,600,50);
		context.stroke();
ログイン後にコピー

注意点は、クリップ機能を使用してトリミングした後、その後の描画はクリップされた領域内のみで行われるため、クリップされた領域の外側に描画したい場合は、保存および復元機能を使用する必要があります。クリッピングする前に、保存機能を使用して現在の描画コンテキストの状態を保存します。クリッピング領域の外側に描画したい場合は、復元機能を使用して描画コンテキストを復元します。

		context.rect(0,500,100,30);
		context.clip();
		context.fillRect(0,500,200,200);
ログイン後にコピー

2. テキストと画像の描画

前の例では、グラフィックスに加えて Canvas を使用しています。 Canvas を使用すると、画像やテキストを簡単に描画することもできます。次のように、drawImage 関数を使用して画像を描画します:

        var image = document.createElement("img");
		image.src = &#39;img/HBuilder.png&#39;;
		image.onload = function(){
				context.drawImage(image,0,600);
		}
ログイン後にコピー

需要注意,上面创建了img元素后,设置src属性后不能立刻进行渲染,因为图片的加载是需要时间的,直接渲染会无法获取图像数据。drawImage这个函数总共可以有8个参数,drawImage(img,sx,sy,sw,sh,x,y,w,h)。其中sx,sy和sw,sh用来对原图像进行裁剪,只选择图像中的部分进行绘制,x,y,w,h设置绘制在画布上的坐标和尺寸。

关于文本绘制,可以使用fillText或strokeText函数,分别用来绘制实心和空心文字。示例如下:

        context.font = "20px Georgia";//设置字体
 		context.textAlign = &#39;start&#39;;  //设置文字对齐方式
		context.fillText("Hello World",0,750,200);
		context.strokeText("Hello World",0,800,200);
ログイン後にコピー

效果如下:

3.绘制属性的设置

在绘制过程中,开发者可以对绘制的线条颜色,填充颜色,风格,阴影等进行设置。示例如下:

		context.fillStyle = &#39;red&#39;;  //设置填充颜色
		context.strokeStyle = &#39;blue&#39;; //设置线条颜色
		context.shadowColor = &#39;green&#39;; //设置阴影颜色
		context.shadowBlur = 10;   //设置阴影模糊度
		context.shadowOffsetX = 10; //设置阴影X轴偏移量
		context.shadowOffsetY = 5;  //设置阴影Y轴偏移量
		context.lineCap = &#39;round&#39;;  //设置线帽样式
		context.lineJoin = &#39;round&#39;; //设置折点样式
		context.lineWidth = 1; //设置线条宽度
ログイン後にコピー

效果如下图:

关于fillStyle和strokeStyle两个属性比较特殊,从名字也可以了解其是设置填充或线条的风格,设置颜色只是一种方式,其还可以设置为一个渐变对象,用来实现渐变效果。例如:

		var g = context.createLinearGradient(0,750,200,750);
		g.addColorStop(0,&#39;black&#39;);
		g.addColorStop(0.5,&#39;red&#39;);
		context.fillStyle =  g;
		context.fillText("Hello World",0,750,200);
ログイン後にコピー

效果入下图:

createLinearGradient函数用来创建线性渐变层,其中4个参数设置起始点的x,y和结束点的x,y。调用addColorStop函数用来想渐变层中添加临界点和颜色值。也可以创建发散型渐变,例如:

        var g = context.createRadialGradient(70,800,20,70,800,50);
		g.addColorStop(0,&#39;black&#39;);
		g.addColorStop(1,&#39;red&#39;);
		context.fillStyle =  g;
		context.fillRect(20,750,100,100);
ログイン後にコピー

效果如下:

createRadiaGradient函数的前3个参数设置渐变开始处的圆弧(分别设置圆心x,y坐标和半径),后3个参数设置渐变结束处的圆弧(分别设置圆心x,y坐标和半径)。

fillStyle和strokeStyle也可以设置为一个模式背景,例如将图片进行重复得到的背景,示例如下:

        image.onload = function(){
			var p = context.createPattern(image,&#39;repeat&#39;);
		    context.fillStyle =  p;
			context.fillRect(20,750,200,200);
		}
ログイン後にコピー

效果如下图所示:

可选的重复模式还有:

repeat-x:只在水平方向重复。

repeat-y:只在竖直方向重复。

no-repeat:不重复,只显示一次。

4.进行画布转换

    画布也可以进行一些简单的变换操作,例如旋转,缩放等等。需要注意,对画布的操作不会影响到已经绘制到画布上的内容,之后绘制的内容会受到影响。使用scale(x,y)函数可以对画布进行缩放,其中两个参数x和y分别设置水平和竖直方向的缩放比例。rotate(angle)函数用来对画布进行旋转,其中的参数为旋转的角度值。translate(x,y)函数用来对画布进行平移,参数x,y分别设置水平和竖直方向的平移量。还有一个复合的transform(a,b,c,d,e,f)函数,使用这个函数可以一步设置平移,旋转和缩放属性,参数意义如下:

a:设置水平缩放比

b:设置水平倾斜

c:设置垂直倾斜

d:设置垂直缩放比

e:设置水平平移

f:设置垂直平移

需要注意,如果你多次调用transform,每次的transform变换都将在上一次的基础上进行。如果你不想保留上一次的记录,可以调用setTransform()函数来重置设置。

更多相关知识,请访问 PHP中文网!!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLの表の境界線 HTMLの表の境界線 Sep 04, 2024 pm 04:49 PM

HTML の表の境界線に関するガイド。ここでは、HTML でのテーブルの境界線の例を示しながら、テーブル境界線を定義する複数の方法について説明します。

HTML 左マージン HTML 左マージン Sep 04, 2024 pm 04:48 PM

HTML マージン左のガイド。ここでは、HTML margin-left の概要とその例、およびそのコード実装について説明します。

HTML のネストされたテーブル HTML のネストされたテーブル Sep 04, 2024 pm 04:49 PM

これは、HTML でのネストされたテーブルのガイドです。ここでは、テーブル内にテーブルを作成する方法をそれぞれの例とともに説明します。

HTML テーブルのレイアウト HTML テーブルのレイアウト Sep 04, 2024 pm 04:54 PM

HTML テーブル レイアウトのガイド。ここでは、HTML テーブル レイアウトの値と例および出力について詳しく説明します。

HTML入力プレースホルダー HTML入力プレースホルダー Sep 04, 2024 pm 04:54 PM

HTML 入力プレースホルダーのガイド。ここでは、コードと出力とともに HTML 入力プレースホルダーの例について説明します。

HTML 順序付きリスト HTML 順序付きリスト Sep 04, 2024 pm 04:43 PM

HTML 順序付きリストのガイド。ここでは、HTML 順序付きリストと型の導入とその例についても説明します。

HTML 内のテキストの移動 HTML 内のテキストの移動 Sep 04, 2024 pm 04:45 PM

HTML でのテキストの移動に関するガイド。ここでは、概要、マーキー タグが構文でどのように機能するか、および実装例について説明します。

HTML の onclick ボタン HTML の onclick ボタン Sep 04, 2024 pm 04:49 PM

HTML オンクリック ボタンのガイド。ここでは、それらの紹介、動作、例、およびさまざまなイベントでの onclick イベントについてそれぞれ説明します。

See all articles