Rumah >hujung hadapan web >Tutorial H5 >Memangkas imej kawasan menggunakan kaedah clip() dalam HTML5 Canvas API_html5 petua tutorial

Memangkas imej kawasan menggunakan kaedah clip() dalam HTML5 Canvas API_html5 petua tutorial

WBOY
WBOYasal
2016-05-16 15:52:011344semak imbas

Apabila menggunakan Kanvas untuk melukis imej, kami selalunya mahu menyimpan hanya sebahagian daripada imej Kami boleh menggunakan fungsi pemangkasan imej API kanvas untuk mencapai idea ini.
Fungsi pemangkasan imej Canvas API bermakna menggunakan laluan dalam kanvas, hanya imej kawasan yang terkandung dalam laluan akan dilukis dan imej di luar laluan tidak akan dilukis. Ini sedikit seperti topeng lapisan dalam Flash.

Gunakan kaedah clip() tanpa parameter konteks grafik untuk melaksanakan fungsi pemangkasan imej Kanvas. Kaedah ini menggunakan laluan untuk menetapkan kawasan keratan untuk Kanvas. Oleh itu, laluan mesti dibuat terlebih dahulu. Selepas penciptaan selesai, panggil kaedah clip() untuk menetapkan kawasan pemangkasan.
Perlu diingat bahawa pemotongan dilakukan pada kanvas Kanvas yang dipotong tidak boleh dipulihkan kepada saiz asalnya, yang bermaksud bahawa kanvas menjadi lebih kecil apabila ia dipotong Untuk memastikan bahawa ia masih boleh pada saiz asal oleh kanvas pada akhirnya Lukisan perlu memberi perhatian kepada save() dan restore(). Kanvas dipotong terlebih dahulu sebelum melukis. Ia tidak semestinya gambar, laluan juga boleh dimasukkan~

Mari kita lihat Demo yang mudah dahulu.

Kod JavaScriptSalin kandungan ke papan keratan
  1.   
  2. "zh">   
  3.   
  4.     "UTF-8">   
  5.     裁剪区域   
  6.        
  7.   
  8.   
  9. "canvas-warp">   
  10.     "canvas">   
  11.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
  12.        
  • window.onload =
  • fungsi(){
  • var kanvas = document.getElementById("kanvas"); kanvas.lebar = 800;
  • kanvas.tinggi = 600;
  • var
  • konteks = canvas.getContext(
  • "2d"
  • ); context.fillStyle = "#FFF"; context.fillRect(0,0,800,600);
  • //Lukis segi empat sama besar pada skrin
  • context.fillStyle =
  • "hitam"
  • ;
  • context.fillRect(10,10,200,200); context.save();
  • context.beginPath();
  • //Potong kanvas dari titik (0, 0) ke petak (50, 50)
  • context.rect(0,0,50,50);
  • context.clip();
  • //Bulatan merah
  • context.beginPath();
  • context.strokeStyle =
  • "merah"
  • ;
  • context.lineWidth = 5;
  • context.arc(100,100,100,0,Math.PI * 2,
  • salah
  • );
  • //Bulatan penuh
  • context.stroke();
  • context.closePath();
  • context.restore();
  • //Potong keseluruhan kanvas sekali lagi
  • context.beginPath();
  • context.rect(0,0,500,500);
  • context.clip();
  • //Lukis garis biru yang belum dipotong
  • context.beginPath();
  • context.strokeStyle =
  • "biru"
  • ;
  • context.lineWidth = 5;
  • context.arc(100,100,50,0,Math.PI * 2,salah);
  • //Bulatan penuh
  • context.stroke();
  • context.closePath();
  • };
  • Hasil jalankan:
  • Menggunakan campuran kaedah save() dan restore(), kita boleh mengehadkan kawasan lukisan. Mula-mula, kita boleh menggunakan kaedah rect() untuk mengelilingi kawasan yang ingin kita lukis, dan kemudian gunakan kaedah clip() untuk memangkas kawasan tersebut.
    Dengan cara ini, tidak kira apa operasi yang kami lakukan dalam konteks, hanya bahagian terhad akan dipaparkan. Dengan kata lain, fungsi clip() adalah untuk mengehadkan kawasan yang hendak dipaparkan. Apabila kita tidak lagi mahu mengehadkan kawasan itu, kita boleh menggunakan kaedah restore() untuk melompat keluar dan terus mengendalikan konteks asal.
    Lihat pemangkasan ini sekali lagi:


    2016325102516578.jpg (850×500)

    Kod JavaScript


    Salin kandungan ke papan keratan
    2016325102545351.png (275×198)

    1. fungsi drawScreen() {
    2. var x = canvas.width / 2;
    3. var y = kanvas.tinggi / 2;
    4. var
    5. jejari = 75;
    6. var
    7. mengimbangi = 50;
    8. //Kawasan yang dipangkas ialah (x, y), iaitu bulatan dengan jejari pusat 75
    9. context.save();
    10. context.beginPath();
    11. context.arc(x, y, radius, 0, 2 * Math.PI,
    12. false
    13. ); context.clip();
    14.  
    15. // Mula-mula lukis lengkok biru, bahagian yang melebihi pemangkasan tidak akan dipaparkan
    16. context.beginPath();
    17. context.arc(x - offset, y - offset, radius, 0, 2 * Math.PI,
    18. false
    19. );
    20. context.fillStyle = 'biru'
    21. ;
    22. context.fill();
    23.  
    24. //Lukis arka kuning, dan bahagian yang melebihi pemangkasan tidak akan dipaparkan
    25. context.beginPath();
    26. context.arc(x offset, y, radius, 0, 2 * Math.PI,
    27. false
    28. );
    29. context.fillStyle = 'kuning';
    30. context.fill();
    31.  
    32. // Lukis lengkok merah, dan bahagian yang melebihi pemangkasan tidak akan dipaparkan
    33. context.beginPath(); context.arc(x, y offset, radius, 0, 2 * Math.PI,
    34. false
    35. );
    36. context.fillStyle =
    37. 'merah';
    38. context.fill();
    39.  
    40. /*
    41. * Kaedah restore() akan kembali kepada keadaan asal konteks, dalam kes ini keadaan sebelum clip().
    42. * Anda boleh mengalih keluar kaedah context.beginPath() dan cuba perkara yang berlaku.
    43. */
    44. context.restore();
    45. context.beginPath();
    46. context.arc(x, y, radius, 0, 2 * Math.PI, false);
    47. context.lineWidth = 10;
    48. context.StrokeStyle =
    49. 'blue'; context.Stroke();
    50. }
    Ich betone noch einmal, dass die allgemeine Aufrufform der Zuschneidefunktion
    ist save();

    clip();
    restore();

    werden in dieser Reihenfolge aufgerufen.


    Kenyataan:
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Artikel sebelumnya:Ringkasan kaedah untuk mencapai penjajaran teks dalam kemahiran tutorial HTML5 Canvas_html5Artikel seterusnya:Ringkasan kaedah untuk mencapai penjajaran teks dalam kemahiran tutorial HTML5 Canvas_html5

    Artikel berkaitan

    Lihat lagi