ホームページ > ウェブフロントエンド > H5 チュートリアル > HTML5 Canvas を使用して画像を色で塗りつぶすためのチュートリアルと texture_html5 チュートリアルのヒント

HTML5 Canvas を使用して画像を色で塗りつぶすためのチュートリアルと texture_html5 チュートリアルのヒント

WBOY
リリース: 2016-05-16 15:45:33
オリジナル
2666 人が閲覧しました

塗りつぶしの色

アートは色と切り離せないものです。今日は塗りつぶしの色を紹介し、色の魅力を体験します。
塗りつぶしの色には主に 2 つのタイプがあります:

1. 基本カラー
2. グラデーションカラー (線形グラデーションと放射状グラデーションにも分かれます)

一つずつ見ていきましょう。


基本色を塗りつぶす
Canvas fillStyle プロパティは、キャンバス上の図形の基本色と塗りつぶしを設定するために使用されます。 fillStyle では単純な色名を使用します。これは非常に単純に見えます。例:

JavaScript コードコンテンツをクリップボードにコピーします
  1. context.fillStyle = "赤";
以下は、HTML4 仕様で使用可能な 16 個の色の文字列値のリストです。 HTML5 では専用カラーを変更しないため、HTML4 のカラーを HTML5 で正しく表示できます。


これらの色の値はすべて、strokingStyle プロパティと fillStyle プロパティに適用できます。 2016321111603054.png (664×656)それでは、基本的な色を塗りつぶす方法をまとめておきます: (ストロークスタイル属性にも使用できます)

(1) カラー文字列塗りつぶしを使用します。



JavaScript コード
コンテンツをクリップボードにコピーします
    context.fillStyle =
  1. "赤"; (2) 16 進数の数字文字列パディングを使用します。
JavaScript コード

コンテンツをクリップボードにコピーします

context.fillStyle =
"#FF0000"
  1. ; (3) 16進数の数字列の略語を入力します。 JavaScript コード
コンテンツをクリップボードにコピーします

context.fillStyle = "#F00"
;
  1. (4) rgb()メソッドを使用して色を設定します。 JavaScript コードコンテンツをクリップボードにコピーします


context.fillStyle =
"rgb(255,0,0)";
(5) rgba()メソッドを使用して色を設定します。
  1. JavaScript コードコンテンツをクリップボードにコピーします
context.fillStyle =
"rgba(255,0,0,1)"


;

このメソッドの最後のパラメータはアルファ値で、透明度の範囲は 1 (不透明) ~ 0 (透明) です。
(6) hsl()メソッドを使用して色を設定します。
  1. JavaScript コードコンテンツをクリップボードにコピーします
context.fillStyle =
"hsl(0,100%,50%)"


;

HSLは色相(H)、彩度(S)、明度(L)の3チャンネルの色を表します。 (7) hsla()メソッドを使用して色を設定します。
JavaScript コード
  1. コンテンツをクリップボードにコピーします context.fillStyle =
  2. "hsla(0,100%,50%,1)"
;


上記の 7 文のコードはすべて赤色で「#FF0000」で埋められています。


塗りつぶしグラデーション形状
キャンバス上にグラデーション塗りつぶしを作成するには、線形または放射状の 2 つの基本オプションがあります。線形グラデーションは、水平、垂直、または斜めの塗りつぶしパターンを作成します。放射状グラデーションは、中心点から放射状の塗りつぶしを作成します。グラデーション形状を塗りつぶすには、グラデーション線を追加する、グラデーション線にキーカラーを追加する、グラデーションを適用するという 3 つの手順があります。以下にその例をいくつか示します。
線形グラデーション
3 ステップ戦略:
グラデーション ラインの追加:

JavaScript コードコンテンツをクリップボードにコピーします
  1. var grd = context.createLinearGradient(xstart,ystart,xend,yend);
グラデーション ラインにキー カラーを追加します (カラー ブレークポイントと同様):



JavaScript コード
コンテンツをクリップボードにコピーします
    grd.addColorStop(stop,color);
ここでのストップは 0 から 1 までの浮動小数点数で、ブレークポイントから (xstart, ystart) までの距離とグラデーション全体の長さの割合を表します。

グラデーションを適用:

JavaScript コード
コンテンツをクリップボードにコピーします
    context.fillStyle =
  1. context.ストロークスタイル = grd;
  2. コードを書いて見てみましょう。

JavaScript コード

コンテンツをクリップボードにコピーします
  1. "zh">
  2. "UTF-8">
  3. 線形グラデーションを塗りつぶす
  4. "キャンバスワープ"> "キャンバス" style="ボーダー: 1px ソリッド #aaaaaa; 表示: ブロック; マージン: 50px 自動;"> あなたのブラウザは Canvas をサポートしていませんか? !早く変えてください! !
  5. <スクリプト
  6. window.onload =
  7. function(){
  8. var Canvas = document.getElementById("canvas"); Canvas.width = 800;
  9. Canvas.height = 600;
  10. var
  11. context = Canvas.getContext(
  12. "2d"
  13. ); context.rect(200,100,400,400);
  14. //グラデーションラインを追加
  15. var grd = context.createLinearGradient(200,300,600,300);
  16. //カラーブレークポイントを追加
  17. grd.addColorStop(0,
  18. "黒"
  19. ); grd.addColorStop(0.5,"白"
  20. );
  21. grd.addColorStop(1,"黒");
  22. //グラデーションを適用
  23. context.fillStyle = grd;
  24. context.fill();
  25. }
  26. 実行結果:
    2016321112313533.jpg (850×500)

    グラデーションを全員が一度に理解できるように図解する必要があると思います。
    2016321112349410.jpg (850×500)

    理解を容易にするために、勾配線を有向線分とみなすことをお勧めします。 PS などの描画ツールに慣れていて、グラデーション設定を使用したことがある場合は、よく理解できるはずです。
    ここでのグラデーションラインの始点と終点は画像内である必要はなく、カラーブレークポイントの位置も同じです。ただし、画像の範囲がグラデーション ラインより大きい場合、グラデーション ラインの範囲外では、エンドポイントに最も近いブレークポイントの色が自動的に塗りつぶされます。
    これは 2 つの補助関数を使用した別の例です。

    長方形を描く簡単な方法

    JavaScript コードコンテンツをクリップボードにコピーします
    1. fillRect(x,y,width,height)、stroke(x,y,width,height)。这两个函数可以分别看做rect()与fill()以及rect()与stroke()的组合。因为rect()仅仅只是规划路径而已,而这两个方法确实实实在在的绘制。   
    2.   
    3. "zh">   
    4.   
    5.     "UTF-8">   
    6.     填充线性渐变   
    7.   
    8.   
    9. "canvas-warp">   
    10.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    11.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    12.        
  27. <スクリプト
  28. window.onload = function(){
  29. var Canvas = document.getElementById("canvas");
  30. Canvas.width = 800;
  31. Canvas.height = 600;
  32. var
  33. context = Canvas.getContext(
  34. "2d");
  35. //グラデーションラインを追加
  36. var grd = context.createLinearGradient(100,300,700,300);
  37. //カラーブレークポイントを追加
  38. grd.addColorStop(0,
  39. "オリーブ"); grd.addColorStop(0.25,
  40. "あずき色"
  41. ); grd.addColorStop(0.5,"アクア"
  42. );
  43. grd.addColorStop(0.75,"フクシア");
  44. grd.addColorStop(0.25,
  45. "ティール");
  46. //グラデーションを適用
  47. context.fillStyle = grd; context.ストロークスタイル = grd;
  48. context.ストロークRect(200,50,300,50);
  49. context.ストロークRect(200,100,150,50); context.ストロークRect(200,150,450,50);
  50. context.fillRect(200,300,300,50);
  51. context.fillRect(200,350,150,50);
  52. context.fillRect(200,400,450,50);
  53. context.fillRect(0,550,800,25);
  54. }
  55. 実行結果:
    2016321113029539.jpg (850×500)

    どちらのページにも水平方向のグラデーションがありますが、線形グラデーションは必ずしも水平である必要はなく、方向はグラデーション ラインの終点を介して任意に設定できることは明らかです。

    放射状グラデーション
    これも 3 ステップの戦略ですが、最初のステップで使用される方法が変更されています。
    グラデーション円を追加:

    JavaScript コードコンテンツをクリップボードにコピーします
    1. var grd = context.createRadialGradient(x0,y0,r0,x1,y1,r1);
    グラデーション ラインにキー カラーを追加します (カラー ブレークポイントと同様):


    JavaScript コード
    コンテンツをクリップボードにコピーします
      grd.addColorStop(stop,color);
    グラデーションを適用:



    JavaScript コード
    コンテンツをクリップボードにコピーします
      context.fillStyle =
    1. context.ストロークスタイル = grd;
    2. 線形グラデーションは 2 つの端点に基づいて定義されますが、放射状グラデーションは 2 つの円に基づいて定義されます。
    例 7-2 を書き直してみましょう。



    JavaScript コード

    コンテンツをクリップボードにコピーします
    1. "zh">
    2. "UTF-8">
    3. 放射状グラデーションを塗りつぶす
    4. "キャンバスワープ"> "キャンバス" style="ボーダー: 1px ソリッド #aaaaaa; 表示: ブロック; マージン: 50px 自動;"> あなたのブラウザは Canvas をサポートしていませんか? !早く変えてください! !
    5. <スクリプト
    6. window.onload =
    7. function(){
    8. var Canvas = document.getElementById("canvas"); Canvas.width = 800;
    9. Canvas.height = 600;
    10. var
    11. context = Canvas.getContext(
    12. "2d"
    13. ); //グラデーションラインを追加
    14. var grd = context.createRadialGradient(400,300,100,400,300,200);
    15. //カラーブレークポイントを追加
    16. grd.addColorStop(0,
    17. "オリーブ"
    18. ); grd.addColorStop(0.25,"あずき色"
    19. );
    20. grd.addColorStop(0.5,"アクア");
    21. grd.addColorStop(0.75,
    22. "フクシア"); grd.addColorStop(0.25,
    23. "ティール"
    24. );
    25. //グラデーションを適用
    26. context.fillStyle = grd;
    27. context.fillRect(100,100,600,400);
    28. }
    29. 実行結果:
      2016321113454037.jpg (850×500)

      なぜこの色の組み合わせがとてもそう感じたのでしょうか...忘れてください、これは芸術と呼ばれます。
      createRadialGradient(x0,y0,r0,x1,y1,r1); メソッドは、放射状グラデーション、つまり 2 つの円の間のグラデーションの開始範囲と終了範囲を指定します。
      要約すると、このレッスンでは、fillStyle、createLinearGradient()、createRadialGradient()、addColorStop()、fillRect()、ストロークRect()、およびその他の属性とメソッドについて学び、基本的な色の塗りつぶし、線形の塗りつぶしについて詳しく紹介しました。グラデーションと放射状グラデーション。
      さて、色の塗り方を学んだところで、思う存分色を使って自分だけの作品を描いてみましょう!

      テクスチャを塗りつぶす

      createPattern() の概要
      テクスチャは実際にはパターンの繰り返しであり、塗りつぶしパターンは createPattern() 関数によって初期化されます。 2 つのパラメータ createPattern(img,repeat-style) を渡す必要があります。1 つ目は Image オブジェクト インスタンスで、2 つ目のパラメータは String 型で、シェイプ内に繰り返しパターンを表示する方法を示します。この関数を使用して、画像またはキャンバス全体を図形の塗りつぶしパターンとしてロードできます。
      画像の塗りつぶしには次の 4 種類があります:

      1. 平面で繰り返します:
      2. X 軸で繰り返します:
      4.リピートを使用しない: no-repeat;

      実際、createPattern() の最初のパラメータは、canvas オブジェクトまたは video オブジェクトに渡すこともできます。ここでは Image オブジェクトについてのみ説明します。残りは自分で試すことができます。


      パターンを作成して塗りつぶす
      まず画像をロードする方法を見てみましょう:

      画像オブジェクトを作成します

      画像オブジェクトの画像ソースを指定します

      コードは次のとおりです:


      JavaScript コードコンテンツをクリップボードにコピーします
      1. var img = new Image(); //画像オブジェクトを作成します
      2. img.src = "8-1.jpg"; //Image オブジェクトの画像ソースを指定します
      拡張子: HTML の相対パス

      '../ディレクトリまたはファイル名' または 'ディレクトリまたはファイル名' は、現在操作されているファイルが配置されているディレクトリのパスを指します
      '../ディレクトリまたはファイル名' 現在操作しているファイルが存在するディレクトリの上位ディレクトリのパスを指します

      その後テクスチャを塗りつぶします:


      JavaScript コードコンテンツをクリップボードにコピーします
      1. var pattern = context.createPattern(img,"repeat"); context.fillStyle = パターン
      2. 完成したプログラムを直接見てみましょう。ここでは、このかわいいキリンをテクスチャとして繰り返し塗りつぶしていきます。画像を選択するときは、不自然に短い接続が発生しないように、テクスチャとして左から右、上から下に相互に通信する画像を選択する必要があることに注意してください。

      以下にコードを示します。
      2016321113732587.jpg (321×400)


      JavaScript コード

      コンテンツをクリップボードにコピーします
      1. html>   
      2. "zh">   
      3.   
      4.      "UTF-8">   
      5.     填入紋理   
      6.   
      7.   
      8. "canvas-warp">   
      9.     "canvas" style="border 1px sol5; ">   
      10.         你的瀏覽器居然不支援Canvas? !趕快換一個吧! !   
      11.        
        
    30.   
    31. <script>   </script>
    32.     window.onload = function(){   
    33.         var canvas = document.getElementById(">        canvas.width = 800;   
    34.         canvas.height = 600;   
    35.         
    36. var
    37.  context = canvas.getContext("21.            
    38. var
    39.  img = 
    40.         img.src = "8-1.jpg";   ;   ;   
    41. ;            img.onload = 
    42. function(){   (){   
    43. (){   (){   (){   (){   
    44. (){   
    45.             var
    46.  pattern = con >
    47.             context.fillStyle = pattern;   
    48.             context.fillRect(0,0,800,600);   
    49.         }   
    50.   
    51.     }   
    52.   

      
    2016321113752010.jpg (850×500)

      

    運行結果: 這裡使用了Image的onload事件,它的作用是對圖片進行預先載入處理,即在圖片載入完成後才立即除非其後function的程式碼體。這個是必須的,如果不寫的話,畫布將會顯示黑屏。因為沒有等待圖片載入完成就填滿紋理,導致瀏覽器找不到圖片。 這裡使用了"repeat",童鞋們也可嘗試使用一下其他三個值,看看會有什麼不同的效果。也可以自己找其他的圖片試試填充,看看效果。
関連ラベル:
ソース:php.cn
前の記事:HTML5 キャンバス モバイル ブラウザーでの画像圧縮アップロード_html5 チュートリアル スキル 次の記事:HTML5 で複数画像アップロード機能を実装_html5 チュートリアル スキル
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート