Heim > Web-Frontend > H5-Tutorial > Beschneiden von Bereichsbildern mit der Methode „clip()' in HTML5 Canvas API_html5-Tutorial-Tipps

Beschneiden von Bereichsbildern mit der Methode „clip()' in HTML5 Canvas API_html5-Tutorial-Tipps

WBOY
Freigeben: 2016-05-16 15:52:01
Original
1348 Leute haben es durchsucht

Wenn wir Canvas zum Zeichnen eines Bildes verwenden, möchten wir oft nur einen Teil des Bildes behalten. Um diese Idee zu verwirklichen, können wir die Bildzuschneidefunktion der Canvas-API verwenden.
Die Bildzuschneidefunktion der Canvas-API bedeutet, dass bei Verwendung eines Pfads innerhalb der Leinwand nur das Bild des im Pfad enthaltenen Bereichs gezeichnet wird und das Bild außerhalb des Pfads nicht gezeichnet wird. Dies ähnelt ein wenig den Ebenenmasken in Flash.

Verwenden Sie die Methode „clip()“ ohne Parameter des Grafikkontexts, um die Bildzuschneidefunktion von Canvas zu implementieren. Diese Methode verwendet einen Pfad, um einen Beschneidungsbereich für die Leinwand festzulegen. Daher muss zunächst der Pfad erstellt werden. Rufen Sie nach Abschluss der Erstellung die Methode „clip()“ auf, um den Zuschneidebereich festzulegen.
Es ist zu beachten, dass der Zuschnitt auf der Leinwand nicht wiederhergestellt werden kann, was bedeutet, dass die Leinwand beim Zuschneiden kleiner wird, um sicherzustellen, dass sie immer noch die ursprünglich definierte Größe hat Durch die Leinwand muss beim Zeichnen am Ende auf save () und wiederherstellen () geachtet werden. Vor dem Zeichnen wird die Leinwand zunächst zugeschnitten. Es muss kein Bild sein, der Pfad kann auch eingefügt werden~

Schauen wir uns zunächst eine einfache Demo an.

JavaScript-CodeInhalt in die Zwischenablage kopieren
  1.   
  2. "zh">   
  3.   
  4.     "UTF-8">   
  5.     裁剪区域   
  6.        
  7.   
  8.   
  9. "canvas-warp">   
  10.     "canvas">   
  11.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
  12.        
  • <script> </span> </li> <li class="alt"> <span> window.onload = </span><span class="keyword">function</span><span>(){ </span> </li> <li> <span> </span><span class="keyword">var</span><span> canvas = document.getElementById(</span><span class="string">"canvas"</span><span>); </span> </li> <li class="alt"> <span>canvas.width = 800; </span> </li> <li> <span>canvas.height = 600; </span> </li> <li class="alt"> <span> </span><span class="keyword">var</span><span> context = canvas.getContext(</span><span class="string">"2d"</span><span> </span> </li> <li> <span> context.fillStyle = </span><span class="string">"#FFF"</span><span> </span> </li> <li class="alt"><span> context.fillRect(0,0,800,600); </span></li> <li> <span> </span> </li> <li class="alt"> <span>//Zeichne ein großes Quadrat auf dem Bildschirm </span><span class="comment"> </span> <span> </span> </li> context.fillStyle = <li> <span>"black"</span><span class="string">; </span><span> context.fillRect(10,10,200,200); </span> </li> context.save(); <li class="alt"> <span> </span> </li> context.beginPath(); <li> <span> </span> </li> <li class="alt"> <span> </span> </li> <li><span>//Schneiden Sie die Leinwand vom Punkt (0, 0) zum Quadrat von (50, 50) </span></li> <li class="alt"> <span> </span><span class="comment"> context.rect(0,0,50,50); </span> <span> </span> </li> context.clip(); <li> <span> </span> </li> <li class="alt"> <span> </span> </li> <li><span>//Roter Kreis </span></li> <li class="alt"> <span> </span><span class="comment"> context.beginPath(); </span> <span> </span> </li> context.StrokeStyle = <li><span>"red"</span></li>; <li class="alt"> <span> context.lineWidth = 5; </span> <span class="string"> </span><span> context.arc(100,100,100,0,Math.PI * 2,</span> </li>false<li> <span>); </span> </li> <li class="alt"> <span> </span><span class="keyword">//Voller Kreis </span><span> </span> </li> <li> <span> context.Stroke(); </span> <span class="comment"> </span><span> context.closePath(); </span> </li> <li class="alt"> <span> </span> </li> <li> <span> context.restore(); </span> </li> <li class="alt"> <span> </span> </li> <li><span> </span></li>//Schneiden Sie die gesamte Leinwand erneut aus <li class="alt"> <span> </span> </li> <li> <span> context.beginPath(); </span> <span class="comment"> </span><span> context.rect(0,0,500,500); </span> </li> context.clip(); <li class="alt"> <span> </span> </li> <li> <span> </span> </li> <li class="alt"><span>//Zeichne eine ungeschnittene blaue Linie </span></li> <li> <span> </span> </li> context.beginPath(); <li class="alt"> <span> </span><span class="comment"> context.StrokeStyle = </span><span>"blue"</span> </li>;<li> <span> context.lineWidth = 5; </span> </li> <li class="alt"> <span> context.arc(100,100,50,0,Math.PI * 2,</span><span class="keyword">false</span><span>); </span> </li> <li> <span> </span><span class="comment">//Voller Kreis </span><span> </span> </li> <li class="alt"> <span> context.Stroke(); </span> </li> <li> <span> context.closePath(); </span> </li> <li class="alt"> <span> }; </span> </li> <li> <span></script>
  • Laufergebnis:
    2016325102516578.jpg (850×500)

    Mit einer Mischung aus den Methoden save() und restart() können wir den Zeichenbereich begrenzen. Zuerst können wir die Methode rect() verwenden, um einen Bereich zu umgeben, den wir zeichnen möchten, und dann die Methode clip() verwenden, um den Bereich zuzuschneiden.

    Auf diese Weise wird unabhängig von den Vorgängen, die wir im Kontext ausführen, nur der begrenzte Teil angezeigt. Mit anderen Worten besteht die Funktion von clip() darin, den anzuzeigenden Bereich einzuschränken. Wenn wir den Bereich nicht mehr einschränken möchten, können wir mit der Methode „restore()“ herausspringen und den ursprünglichen Kontext weiter bearbeiten.
    Sehen Sie sich diesen Zuschnitt noch einmal an:
    2016325102545351.png (275×198)

    JavaScript-CodeInhalt in die Zwischenablage kopieren
    1. Funktion drawScreen() {
    2. var x = canvas.width / 2
    3. var y = canvas.height / 2
    4. var Radius = 75;
    5. var offset = 50;
    6. //Der zugeschnittene Bereich ist (x, y), ein Kreis mit einem Mittelpunktsradius von 75
    7. context.save();
    8. context.beginPath();
    9. context.arc(x, y, radius, 0, 2 * Math.PI,
    10. false
    11. ); context.clip();
    12.  
    13. // Zeichnen Sie zuerst einen blauen Bogen. Der Teil, der über den Zuschnitt hinausgeht, wird nicht angezeigt
    14. context.beginPath();
    15. context.arc(x – Offset, y – Offset, Radius, 0, 2 * Math.PI,
    16. false
    17. );
    18. context.fillStyle = 'blue'
    19. ;
    20. context.fill();
    21.  
    22. //Zeichnen Sie einen gelben Bogen und der Teil, der über den Zuschnitt hinausgeht, wird nicht angezeigt
    23. context.beginPath(); context.arc(x offset, y, radius, 0, 2 * Math.PI,
    24. false
    25. );
    26. context.fillStyle =
    27. 'gelb'; context.fill();
    28.  
    29. // Zeichnen Sie einen roten Bogen, und der Teil, der über den Zuschnitt hinausgeht, wird nicht angezeigt
    30. context.beginPath();
    31. context.arc(x, y offset, radius, 0, 2 * Math.PI, false);
    32. context.fillStyle =
    33. 'red'
    34. ;
    35. context.fill();
    36.  /*
    37. * Die Methode „restore()“ kehrt zum ursprünglichen Zustand des Kontexts zurück, in diesem Fall zum Zustand vor „clip()“.
    38. * Sie können die context.beginPath()-Methode entfernen und versuchen, was passiert.
    39. */
    40. context.restore();
    41. context.beginPath();
    42. context.arc(x, y, rayon, 0, 2 * Math.PI, false
    43. );
    44. context.lineWidth = 10;
    45. context.StrokeStyle = 'bleu'
    46. ;
    47. contexte.AVC();
    48. }


    Je souligne encore une fois que la forme générale d'appel de la fonction de recadrage est

    save();
    clip();
    restore();
    sont appelés dans cet ordre.

    Verwandte Etiketten:
    Quelle:php.cn
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Empfehlungen
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage