検索
ホームページウェブフロントエンドH5 チュートリアルhtml5 Canvas は直線の描画と線種の設定を実装します

html5 Canvas は直線の描画と線種の設定を実装します

Jun 22, 2018 pm 03:19 PM
canvas直線を引くライン

この記事では、HTML5 キャンバスで直線を描画する方法と線のスタイルを設定する方法を主に紹介します。必要な友達に参考にしてください。線の描画は最も基本です。 、線の接続により任意の形状を形成できます。 Canvasでも同様です。 次に、最も簡単な線の描き方を詳しく紹介します。 Canvas が何なのかまだわからない場合は、前の記事を読んでください。描画を学ぶとき、線は最も基本であり、線の接続によってあらゆるグラフィックを形成できます。 Canvas でも同様です。

始める前に、キャンバスとブラシを取り出しましょう:


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);

この時点で Web ページを更新すると、キャンバス上に予想される行がなく、何も表示されていないことがわかります。なぜなら、lineTo は実際には描画された「パス」であり、それ自体は目に見えないからです。彼を表示したい場合は、彼を「描く」必要があります。
PS を使用したことのある生徒は、グラフィックの 2 つのモード、1 つは塗りつぶし、もう 1 つはストロークであることを確実に知っているでしょう。線を描画したことは、PS でパスを描画したことと同じです。この時点で、パスのエッジを描画することができ、グラフィックスが表示されます。
キャンバスのストロークメソッドはストローク()です。次のコードを完成させましょう。この時点で更新すると、行が表示されます。もちろん、数百のパスを連続して描画し、その後ストローク アクションを実行して数百の線を一度に描画することもできます。次に、4 本の線で長方形を描画しましょう:

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

ここでは、最初にパス全体を描画し、それから一度にストロークします。
——–作者の不満: Canvas 描画の欠点の 1 つは、基本的に推測に基づいており、非常に直感的ではないことです。

重要な注意事項: キャンバスの描画プロセス (つまり、塗りつぶしやストローク) は非常にリソースを消費します。システム リソースを節約して効率を向上させたい場合は、すべてのパスを描画してからグラフィックを一度に塗りつぶすかストロークするのが最善です。

上の図から、デフォルトの線の太さは 1px、線の色は黒であることがわかります。もちろん設定できるのですが、不思議なのは、線幅の設定は lineWidth ですが、線のスタイルの設定は、なぜ lineStyle ではないのでしょうか。私にも分かりません。 :

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

上記のコードは、線の幅を 10px に、線の色を半透明の赤に設定します。




図 1 に示すように、何かが間違っているようですので、更新してください。左上隅に小さな部分が欠けているのはなぜですか?これは幻想ではありません。その理由はキャンバスの線の描き方から始まります。
質問: 描画した長方形のパスの幅と高さが 100、辺の線の幅が 10 ピクセルの場合、辺を描画した長方形の全体の幅と高さはいくらですか? 100+10*2=120ですか?

エッジがパスの外側に完全に描画されている場合は、120 です。しかし、キャンバスはそうではありません。 Canvas のすべての線には「中央線」があり、線の絶対的な中央に位置し、線のストロークは中心線から両側に伸びます。たとえば、線の幅が 1 の場合、中心線は 0.5 にあり、幅が 5 の場合、中心線は 2.5 になります。キャンバス グラフィックスをストロークすると、パスは線の中心線に合わせてストロークされます。図 2 に示すように:



したがって、トレースすると、線の半分が外側にあり、半分が内側にあります。つまり、上の長方形の全体の幅は 100+(10/2) になります。 *2 は 110 に相当します。
も正しいです。 このため、左上の角が欠けているのは当然です。ここでは絵を描く人がいないからです。

しかし、残りの角はなぜ欠けていないのでしょうか?写真の四隅に隙間があるように見えませんか?

それは、線を描くときにブラシを「持ち上げ」なかったためです。つまり、ブラシが連続していたためです。つまり、moveTo がありませんでした。信じられないなら、今すぐ moveTo をしてみましょう: html5 Canvas は直線の描画と線種の設定を実装します

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

2 番目の線を描く前に 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 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
H5:Web開発の新機能と機能H5:Web開発の新機能と機能Apr 29, 2025 am 12:07 AM

H5は多くの新しい機能と機能をもたらし、Webページのインタラクティブ性と開発効率を大幅に改善します。 1。SEOの強化などのセマンティックタグ。 2.マルチメディアサポートは、オーディオとビデオの再生とタグを簡素化します。 3. Canvas Drawingは、動的なグラフィックスの描画ツールを提供します。 4.ローカルストレージは、LocalStorageとSessionStorageを介してデータストレージを簡素化します。 5. Geolocation APIは、ロケーションベースのサービスの開発を促進します。

H5:HTML5の重要な改善H5:HTML5の重要な改善Apr 28, 2025 am 12:26 AM

HTML5は5つの重要な改善をもたらします。1。セマンティックタグにより、コードの明確性とSEO効果が向上します。 2.マルチメディアサポートは、ビデオとオーディオの埋め込みを簡素化します。 3。フォームエンハンスメントは、検証を簡素化します。 4.オフラインおよびローカルストレージにより、ユーザーエクスペリエンスが向上します。 5。キャンバスとグラフィック機能は、Webページの視覚化を強化します。

HTML5:標準とWeb開発への影響HTML5:標準とWeb開発への影響Apr 27, 2025 am 12:12 AM

HTML5のコア機能には、セマンティックタグ、マルチメディアサポート、オフラインストレージ、ローカルストレージ、フォームエンハンスメントが含まれます。 1。コードの読みやすさとSEO効果を改善するためのセマンティックタグなど。 2.ラベルでマルチメディアの埋め込みを簡素化します。 3。アプリケーションキャッシュやLocalStorageなどのオフラインストレージとローカルストレージは、ネットワークのない操作とデータストレージをサポートします。 4.フォームエンハンスメントでは、処理と検証を簡素化するための新しい入力タイプと検証プロパティを導入します。

H5コードの例:実用的なアプリケーションとチュートリアルH5コードの例:実用的なアプリケーションとチュートリアルApr 25, 2025 am 12:10 AM

H5は、さまざまな新機能と機能を提供し、フロントエンド開発の機能を大幅に向上させます。 1.マルチメディアサポート:メディアを埋め込んで要素を埋め込み、プラグインは必要ありません。 2。キャンバス:要素を使用して、2Dグラフィックとアニメーションを動的にレンダリングします。 3。ローカルストレージ:ユーザーエクスペリエンスを改善するために、ローカルストレージとセッションストレージを介して永続的なデータストレージを実装します。

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の重要な要素には、最新のWebページの構築に使用される、、,,,,などが含まれます。 1.ヘッドコンテンツを定義します。2。リンクをナビゲートするために使用されます。3。独立した記事のコンテンツを表します。4。ページコンテンツを整理します。5。サイドバーコンテンツを表示します。

HTML5およびH5:一般的な使用法の理解HTML5およびH5:一般的な使用法の理解Apr 22, 2025 am 12:01 AM

HTML5とHTML5の略語であるHTML5とH5の間に違いはありません。 1.HTML5はHTMLの5番目のバージョンであり、Webページのマルチメディア関数とインタラクティブ機能を強化します。 2.H5は、HTML5ベースのモバイルWebページまたはアプリケーションを参照するためによく使用され、さまざまなモバイルデバイスに適しています。

HTML5:現代のウェブのビルディングブロック(H5)HTML5:現代のウェブのビルディングブロック(H5)Apr 21, 2025 am 12:05 AM

HTML5は、W3Cによって標準化されたHyperText Markup言語の最新バージョンです。 HTML5は、新しいセマンティックタグ、マルチメディアサポート、フォームの強化、Web構造の改善、ユーザーエクスペリエンス、SEO効果を導入します。 HTML5は、Webページ構造をより明確にし、SEO効果をより良くするために、、、、、、などの新しいセマンティックタグを導入します。 HTML5はマルチメディア要素をサポートしており、サードパーティのプラグインは不要で、ユーザーエクスペリエンスと読み込み速度が向上します。 HTML5はフォーム関数を強化し、ユーザーエクスペリエンスを向上させ、フォーム検証効率を向上させるなどの新しい入力タイプを導入します。

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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール