• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • HTML5學習筆記(5)使用Canvas畫圖(下)— 繪制圖像和文字

    標簽: HTML學習筆記分享  HTML5  canvas

    1. 繪制圖像

    API是drawImage(), 常用語法是drawImage(image,x,y,width,height)

    例子1:不同形式顯示一張圖片

    <canvas id="myCanvas" height=1000 width=1000>您的瀏覽器不支持 canvas。</canvas>
    <script type="text/javascript">
    function draw()
    {
      var c=document.getElementById("myCanvas");  // 獲取網頁中的canvas對象
      var ctx=c.getContext("2d");  //獲取canvas對象的上下文
      var imageObj = new Image();  // 創建圖像對象
      imageObj.src = "XXX.jpg";  // 獲得當前目錄下的圖像
    
      imageObj.onload = function(){   
          ctx.drawImage(imageObj, 0, 0); // 完整顯示
          ctx.drawImage(imageObj, 250, 0, 120, 160);  // 改變圖像大小顯示
          ctx.drawImage(imageObj, 0, 100, 240, 160, 400, 0, 240, 160);  //選擇圖像一部分顯示
       }; 
    }
    window.addEventListener("load", draw, true);
    </script>
    

    例子2:組合圖像顯示

    <canvas id="myCanvas" height=500 width=500>您的瀏覽器不支持 canvas。</canvas>
    <script type="text/javascript">
    function draw()
    {
      var c=document.getElementById("myCanvas") // 獲取網頁中的canvas對象	
      var ctx=c.getContext("2d")                // 獲取canvas對象的上下文
      ctx.fillStyle = "yellow"                  // 填充圖形內部的顏色為黃色
      ctx.fillRect(50,50, 100, 100)             // 矩形的寬度和高度為100,內部填充黃色
    
      ctx.fillStyle = "red"
      ctx.globalCompositeOperation = "soure-over"  //覆蓋填充
    
      var centerX = 150
      var centerY = 150
      var radius = 50
      var startAngle = 0
      var endiAngle = 2 * Math.PI
    
      ctx.beginPath()// 開始繪圖路徑
      ctx.arc(centerX, centerY, radius, startAngle, endiAngle, false) //繪制圓
      ctx.fill()   
    } 
    
    window.addEventListener("load", draw, true)
    </script>
    

    PS:目前發現用sublime的view in browser看HTML程序編寫的效果有個問題,如果代碼寫錯就會是全白,但是并不會顯示是哪一行代碼出現問題

    調試方法:

    (1)運用document.write()或alert()輸出變量的值

    (2)用chrome中工具的開發者工具,或者直接按F12

    2.  輸出文字

    可以使用strokeText()方法在畫布的指定位置輸出文字,語法如下:

    strokeText(string text,float x, float y)這樣輸出的文字是中空的,可以通過fillText輸出文字,內部是填充了顏色的。

    <canvas id="myCanvas" height=500 width=500>您的瀏覽器不支持 canvas。</canvas>
    <script type="text/javascript">
    function draw()
    {
      var c=document.getElementById("myCanvas");  // 獲取網頁中的canvas對象
      var ctx=c.getContext("2d");  //獲取canvas對象的上下文
    
      var Colordiagonal = ctx.createLinearGradient(100,100, 300,100);
      Colordiagonal.addColorStop(0, "yellow");
      Colordiagonal.addColorStop(0.5, "green");
      Colordiagonal.addColorStop(1, "red"); 
      ctx.fillStyle = Colordiagonal;
      ctx.font = "30pt 隸書";
      ctx.fillText("浙江理工大學", 50, 50);  //漸變填充文字
      ctx.strokeText("天津大學", 100, 100); //位置
    }
    
    window.addEventListener("load", draw, true);
    </script>
    

    PS:分號可以寫,也可以不寫,但一定要寫對,是英文輸入法的;

    3. 圖像操作

    (1)保存和恢復繪圖狀態

    可以調用Context.save()方法保存當前的繪圖狀態,Canvas是以堆(stack)的方式保存繪圖狀態的,調用Context.restoe()可以從堆中彈出之前保存的繪圖狀態。

    <canvas id="myCanvas" height=500 width=500> </canvas>
    <script type="text/javascript">
    function draw() {
    var ctx = document.getElementById('myCanvas').getContext('2d');
    ctx.fillStyle = 'red'
    ctx.fillRect(0,0,150,150);
    ctx.save(); 
    
    ctx.fillStyle = 'green' 
    ctx.fillRect(45,45,60,60); 
    ctx.restore(); 
    
    ctx.fillStyle = 'black'
    ctx.fillRect(60,60,30,30); 
    }
    window.addEventListener("load", draw, true);
    </script>
    
    

    (2)圖形的變換

    平移:translate(x,y)  // x是x坐標軸縮放比例,y是y坐標軸縮放比例

    縮放:scale(x,y)

    旋轉:rotate(angle)

    變形:setTransform(m11, m12, m21, m22, dx, dy)假設(x,y)經過變形為(X, Y),

    變形的公式為:X=m11*x + m21*y + dx

                           Y = m12*x  + m22*y +dy

    <canvas id="myCanvas" height=550 width=550>您的瀏覽器不支持 canvas。</canvas>
    <script type="text/javascript">
    function draw()
    {
      var canvas=document.getElementById("myCanvas");  // 獲取網頁中的canvas對象
      var context = canvas.getContext("2d"); //獲取canvas對象的上下文
      context.save(); //保存了當前context的狀態
    
      context.fillStyle = "red";
      context.fillRect(0, 0, 400, 300);
    
      context.fillStyle = "blue";
      context.fillRect(0, 0, 100, 100);      //正方形
    
      context.fillStyle = "green";
      //平移 縮放 旋轉  1 2 3        
      context.translate(100, 100);           //坐標原點平移(100, 100)
      context.scale(0.5, 0.5);               //x,y軸是原來一半
      context.rotate(Math.PI / 4);           //旋轉45度
      context.fillRect(0, 0, 100, 100);      //平移 縮放 旋轉后的正方形
    
      context.restore(); // 恢復之前保存的繪圖狀態, 如果沒有恢復,就接下來畫的圖也會進行移動等操作
      //
      context.fillStyle = "black";
      context.beginPath();  //  開始繪圖路徑
      // context.arc(200, 50, 50, 0,  2 * Math.PI, false); 
      context.arc(50, 50, 50, 0,  2 * Math.PI, false); 
      context.stroke();
      context.fill();
    
    }
    window.addEventListener("load", draw, true);
    </script>
    

    4.繪制圖像動畫

    動畫是通過一幅幅靜止的,內容不同的畫面(幀)快速播放,人類視覺殘留的視覺大約為1/24秒。所以在計算機上喲啊實現動畫效果,要能實現定期繪圖 和 清除先前繪制的圖像。

    <!DOCTYPE html>
    <html>
      <head>
        <title>HTML5 Canvas實現游戲人物的跑步動畫</title>
      </head>
      <script type="text/javascript"> 
        var imageObj = new Image(); // 創建圖像對象
        var x =300; 
        var n =0;                   // 計數器
    
        function init()
        {
          imageObj.src = 'XXX.jpg';
          imageObj.onload = function(){
             setInterval(draw,100);// 定時器,每0.1秒執行一次draw()函數
          };
        }
    
        function draw()
        {
            var canvas=document.getElementById("myCanvas");  // 獲取網頁中的canvas對象
            var ctx = canvas.getContext("2d"); //獲取canvas對象的上下文
             
               ctx.clearRect(0,0,300,300); // 清除canvas畫布 
     
               //從原圖(60*n)位置開始截取中間一塊寬60*高80的區域,顯示在屏幕(x,0)處           
               ctx.drawImage(imageObj, 60*n, 0, 60, 80, x, 0, 60, 80);
               if(n>=8){
                  n=0;
               }else{
                  n++;
               }
               if(x>=0){
                  x=x-30;  //前移30像素
               }else{
                  x=300;   //回到右側
               }       
        }
        window.addEventListener("load", init, true);
      </script>
    
      <body>
        <canvas id="myCanvas" width="300" height="300"></canvas>
      </body>
    </html>
    
    

     

    版權聲明:本文為Amigo_1997原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/Amigo_1997/article/details/107761425

    智能推薦

    【QT】使用QPainter繪制圖片、文字和形狀

    轉載請注明出處 文章目錄 概述 繪制圖片 繪制形狀 繪制文字 概述 QT使用QPainter進行二維圖形繪制,QPainter可以繪制各種圖形,例如點、線、矩形、圓、橢圓等,QPainter也支持線性變換,例如平移、旋轉縮放等,此外,QPainter也支持一些高級特性,例如反走樣等等、像素混合、漸變填充等,在繪制前可以設置畫筆、畫刷、字體屬性來控制繪制效果。 QPainter的使用需要一個&ldq...

    利用pyqt5繪制圖像

    在pyqt界面上繪圖是一個單獨的技術點,需要重新開一節進行講解。 在pyqt上繪圖主要分為兩個步驟: 1、定義你的繪圖事件 2、完成你的繪圖函數 1、定義你的繪圖事件 定義繪圖事件,這樣做的目的是,每次需要更新界面的時候,可以通過self.update() 函數更新整個畫面(鼠標在按鈕上移動也會觸發這個函數): 2、完成你的繪圖函數 想想你用windows畫圖板的時候的流程是不是這樣的:①在工具欄...

    HTML5利用Canvas繪制圖形(繪制漸變、模式、變換)

    繪制漸變 漸變是一種很普遍的視覺形象,能帶來視覺上的舒適感。在Canvas中,繪圖API提供了兩個原生的漸變方法,包括線性漸變和徑向漸變。漸變,在顏色集上使用逐步抽樣的算法,可以應用的描邊樣式和填充樣式中。使用漸變需要三個步驟:首先是創建漸變對象;其次是設置漸變顏色和過渡方式;最后將漸變對象賦值給填充樣式或描邊樣式。 代碼實現 效果 上(線性漸變),下(徑向漸變) 模式    ...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    猜你喜歡

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    精品国产乱码久久久久久蜜桃不卡