首頁 web前端 H5教程 實例講解利用HTML5 Canvas API操作圖形旋轉的方法_html5教學技巧

實例講解利用HTML5 Canvas API操作圖形旋轉的方法_html5教學技巧

May 16, 2016 pm 03:45 PM
canvas html5 旋轉

身為web開發者,我一直在和HTML5 canvas元素打交道。渲染圖片是一個大的分支,十分重要而且很常用,所以,今天的教程是關於畫布圖像展示以及如何旋轉圖像,說不定是你現在真正想要的好東西。

總的來說,canvas旋轉有兩種方式:中心旋轉和參考點旋轉。熟練應用旋轉功能,對你的開發作品會有極大的幫助。

關於物件的中心旋轉
第一個類型的旋轉,我們要看看是對其中心旋轉一個物件。實作使用畫布元素,這是一個最簡單的旋轉類型。我們把一隻大猩猩的圖片當作素材來試驗。
基本的想法是,我們要把帆布按照一個中心點旋轉,旋轉畫布,然後把畫布回到原來的位置。如果你有一些經驗關於圖形引擎,那麼這聽起來應該很熟悉。程式碼大概就是這樣:(點擊看效果)

JavaScript Code複製內容到剪貼簿
  1. function onload() {   
  2.     var canvas = document.getElementById('c1'
  3.     
  4. var ctx1 = canvas.getContext('2d'     
  5. var
  6.  image1 = new    image1.onload = function() {   
  7.       // regular rotation about center   
  8.       var xpos = canvas.width/2;   
  9.       var ypos = canvas.height/2;   
  10.       ctx1.drawImage(image1, xpos - image1.width / 2, ypos - image1.height / 2);       ctx1.save();   
  11.       ctx1.translate(xpos, ypos);   
  12.       ctx1.rotate(47 * Math.PI / 180);
  13. //旋轉47度
  14.  
  15.       ctx1.translate(-xpos, -ypos);   
  16.       ctx1.drawImage(image1, xpos - image1.width / 2, ypos - image1.height / 2);       ctx1.restore();   
  17.     }   
  18.     image1.src = 
  19. 'image.png'
  20. ;   
  21.   }     
  22. 2016322114126609.gif (383×384)

    註解已經非常詳細,但我仍舊想提一點:.save()和.restore()。他們的作用是保存旋轉之前的畫布,然後旋轉後恢復。有效地避免了和其他渲染衝突,十分關鍵,許多朋友沒有順利進行旋轉,大多都是這個原因。

    圍繞某個點旋轉
    第二個類型是圖像圍繞空間的某個點進行旋轉,這將變得比較複雜。可為什麼要這樣做呢?很多情況下,你需要把物件參考另一個物件旋轉,單一的圍繞中心旋轉無法滿足需求。而且後者會比較常用,例如在做網頁遊戲中,常常會用到旋轉。

    2016322114156905.jpg (422×253)
    JavaScript Code複製內容到剪貼簿

    1. 函數 onload() {   
    2.     var canvas2 = document.getElementById('c2'     
    3. var ctx2 = canvas2.getContext('2d'     //圍繞點
    4. 定期旋轉     var
    5.  image2 =      image2.onload = 函數
    6. () {   
    7.       //在某點周圍定期旋轉
    8.   
    9.       var
    10.  角度 = 120 * Math.PI / 180; 
    11. 🎜>       var rx = 300, ry = 200;        
    12. var px = 300, py = 50;        var 半徑 = ry - py; 
    13. /y 位置或半徑       var dx = rx  半徑 * Math.sin (角度);       
    14. var dy = ry - 半徑 * Math.       ctx2.drawImage(image2, 300 - image2.width / 2, 50 - image2.height / 2);       ctx2.beginPath();   
    15.       ctx2.arc(300,200,5,0,Math.PI*2,
    16. false);   );       ctx2.closePath();   
    17.       ctx2.fillStyle = 
    18. 'rgba(0,255,0,0.25)';         ctx2.fill();             
    19.       ctx2.save();   
    20.       ctx2.translate(dx, dy);   
    21.       ctx2.rotate(角度);          ctx2.translate(-dx, -dy);   
    22.       ctx2.drawImage(image2, dx - image2.width / 2, dy - image2.height / 2);   
    23.       ctx2.restore();        }   
    24.     image2.src = 
    25. 'smallimage.png';   
    26.   }  
    27. 2016322114243019.gif (614×416)

      程式碼簡潔,作用是把一張圖片依照一點旋轉了120度,這張圖片更有形象。

      繪製魔性Logo
      這是在度娘上看到了一個logo,巧妙運用了旋轉變換,用一個很簡單矩形,透過旋轉變換,變成了一個很漂亮的logo 。這logo是不是很有魔性?童鞋們動動腦,試著實現它。下面,提供我實現它的程式碼。

      JavaScript Code複製內容到剪貼簿
      1.   
      2. "zh">   
      3.   
      4.     "UTF-8">   
      5.     绘制魔性Logo   
      6.        
      7.   
      8.   
      9. "canvas-warp">   
      10.     "canvas">   
      11.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
      12.        
        
    28.   
    29.   
    30.     window.onload = 函數(){   
    31.         var canvas = document.getElementById("   
    32.         canvas.width = 800;   
    33.         canvas.height = 600;   
    34.         
    35. var context = canvas.getContext("2d"            context.fillStyle = 
    36. "#FFF";            context.fillRect(0,0,800,600);   
    37.   
    38.         
    39. for(var 🎜>var i=1; >
    40.             context.save();   
    41.             context.translate(400,300);   
    42.             context.rotate(36 * i * Math.PI / 180);   
    43.             context.fillStyle = 
    44. "rgba(255,0,0,0.25)";   
    45.             context.fillRect(0, -200, 200, 200);   
    46.             context.restore();   
    47.         }   
    48.     };   
    49. 腳本>   
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1422
52
Laravel 教程
1316
25
PHP教程
1267
29
C# 教程
1239
24
HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

See all articles