ホームページ > ウェブフロントエンド > H5 チュートリアル > HTML5 Canvas API_html5 の Clip() メソッドを使用して領域画像をトリミングするチュートリアルのヒント

HTML5 Canvas API_html5 の Clip() メソッドを使用して領域画像をトリミングするチュートリアルのヒント

WBOY
リリース: 2016-05-16 15:52:01
オリジナル
1364 人が閲覧しました

Canvas を使用して画像を描画する場合、画像の一部だけを保持したいことがよくありますが、これを実現するには Canvas API の画像トリミング機能を使用します。
Canvas APIの画像トリミング機能とは、キャンバス内のパスを使用すると、パスに含まれる領域の画像のみが描画され、パスの外側の画像は描画されません。これは Flash のレイヤーマスクに似ています。

グラフィックスコンテキストのパラメータを指定せずにclip()メソッドを使用して、Canvasの画像トリミング機能を実装します。このメソッドは、パスを使用して Canvas のクリッピング領域を設定します。したがって、最初にパスを作成する必要があります。作成が完了したら、clip()メソッドを呼び出してトリミング領域を設定します。
キャンバス上でトリミングが実行されることに注意してください。トリミングされたキャンバスは元のサイズに戻すことができません。これは、キャンバスが最初に定義されたサイズのままであることを保証するためです。最終的にキャンバスで描画する場合はsave()とrestore()に注意する必要があります。描画する前に、まずキャンバスをカットします。写真である必要はありません、パスを入れることもできます~

まず簡単なデモを見てみましょう。

JavaScript コードコンテンツをクリップボードにコピーします
  1.   
  2. "zh">   
  3.   
  4.     "UTF-8">   
  5.     裁剪区域   
  6.        
  7.   
  8.   
  9. "canvas-warp">   
  10.     "canvas">   
  11.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
  12.        
  • <スクリプト>
  • window.onload = function(){
  • var Canvas = document.getElementById("canvas");
  • Canvas.width = 800;
  • Canvas.height = 600;
  • var context = Canvas.getContext("2d"); context.fillStyle =
  • "#FFF"
  • ; context.fillRect(0,0,800,600);
  • //画面上に大きな正方形を描画します
  • context.fillStyle = "黒"
  • ;
  • context.fillRect(10,10,200,200); context.save();
  • context.beginPath();
  • //(0, 0) 点から (50, 50) の正方形までキャンバスを切り取ります
  • context.rect(0,0,50,50); context.clip();
  • //赤丸
  • context.beginPath(); context.ストロークスタイル =
  • "赤"
  • ;
  • context.lineWidth = 5
  • ; context.arc(100,100,100,0,Math.PI * 2,false
  • );
  • //フルサークル
  • context.ストローク();
  • context.closePath();
  • context.restore();
  • //キャンバス全体を再度カットします
  • context.beginPath();
  • context.rect(0,0,500,500); context.clip();
  • //カットされていない青い線を描画します
  • context.beginPath();
  • context.ストロークスタイル = "青";
  • context.lineWidth = 5
  • ;
  • context.arc(100,100,50,0,Math.PI * 2,false);
  • //フルサークル
  • context.ストローク();
  • context.closePath();
  • };
  • 実行結果:


    2016325102516578.jpg (850×500)save() メソッドとrestore() メソッドを組み合わせて使用​​すると、描画領域を制限できます。まず、rect() メソッドを使用して描画したい領域を囲み、次に Clip() メソッドを使用して領域をトリミングします。

    このように、コンテキスト内でどのような操作を行っても、限られた部分のみが表示されます。つまり、clip()の機能は表示する領域を制限することです。領域を制限したくない場合は、restore() メソッドを使用して元のコンテキストから飛び出し、操作を続行できます。

    この切り抜きをもう一度見てください:



    2016325102545351.png (275×198)

    JavaScript コード
    コンテンツをクリップボードにコピーします
    1. 関数drawScreen() {
    2. var x = Canvas.width / 2;
    3. var y = Canvas.height / 2;
    4. var
    5. 半径 = 75;
    6. var
    7. オフセット = 50
    8. //トリミングされた領域は (x, y)、中心半径 75 の円です
    9. context.save();
    10. context.beginPath();
    11. context.arc(x, y, radius, 0, 2 * Math.PI,
    12. false
    13. ); context.clip();
    14. // まず青い円弧を描きます、切り抜きを越えた部分は表示されません
    15. context.beginPath();
    16. context.arc(x - オフセット, y - オフセット, 半径, 0, 2 * Math.PI,
    17. false
    18. );
    19. context.fillStyle = '青';
    20. context.fill();
    21. //黄色の円弧を描き、切り抜きを越えた部分は表示されません
    22. context.beginPath();
    23. context.arc(x オフセット, y, 半径, 0, 2 * Math.PI, false
    24. );
    25. context.fillStyle =
    26. ' yellow'
    27. ; context.fill();
    28. // 赤い円弧を描き、切り抜きを越えた部分は表示されません
    29. context.beginPath();
    30. context.arc(x, y オフセット, 半径, 0, 2 * Math.PI,
    31. false); context.fillStyle =
    32. 'red'
    33. ;
    34. context.fill();
    35. /* *restore() メソッドはコンテキストの元の状態、この場合は Clip() 前の状態に戻ります。
    36. * context.beginPath() メソッドを削除して、何が起こるかを試すことができます。
    37. */
    38. context.restore();
    39. context.beginPath();
    40. context.arc(x, y, radius, 0, 2 * Math.PI, false);
    41. context.lineWidth = 10;
    42. context.strokeStyle =
    43. 'biru'
    44. ; context.stroke();
    45. }
    46. Saya menekankan sekali lagi bahawa bentuk panggilan umum fungsi pemangkasan ialah
    save();
    clip();
    restore();

    dipanggil dalam susunan ini.

    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のおすすめ
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート