HTML5使用Canvas來繪製圖形

来源:http://www.cnblogs.com/qijunjun/archive/2017/08/01/7269750.html
-Advertisement-
Play Games

一、Canvas標簽: 1、HTML5<canvas>元素用於圖形的繪製,通過腳本(通常是javascript)來完成。 2、<canvas>標簽只是圖形容器,必須使用腳本來繪製圖形。 3、可以通過多種方法通過Canvas繪製路徑、盒、圓、字元以及添加圖像。 二、Canvas繪製圖形 1、繪製矩形 ...


一、Canvas標簽:

1、HTML5<canvas>元素用於圖形的繪製,通過腳本(通常是javascript)來完成。

2、<canvas>標簽只是圖形容器,必須使用腳本來繪製圖形。

3、可以通過多種方法通過Canvas繪製路徑、盒、圓、字元以及添加圖像。

二、Canvas繪製圖形

1、繪製矩形


2、繪製圓形 

 3、moveTo和lineTo

4、使用bezierCurveTo繪製貝塞爾曲線

 

5、繪製線性漸變

 

 

 6、繪製徑向漸變

7、繪製變形圖形

8、繪製圖形合成gloablCompositeOperation屬性

使用不同的 globalCompositeOperation 值繪製矩形。橙色矩形是目標圖像。粉色矩形是源圖像。

定義和用法

globalCompositeOperation屬性設置或返回如何將一個源(新的)圖像繪製到目標(已有)的圖像上。  源圖像 = 您打算放置到畫布上的繪圖。  目標圖像 = 您已經放置在畫布上的繪圖。

屬性值:

 
屬性
source-atop
在先繪製的圖形頂部顯示後繪製的圖形。後繪製的圖形位於先繪製的圖形之外的部分是不可見的。
source-in 只繪製相交部分,由後繪製圖形的填充覆蓋,其餘部分透明。
source-out 只繪製後繪製圖形不相交的部分,由後繪製圖形的填充覆蓋,其餘部分透明。
source-over 在先繪製的圖形上顯示後繪製的圖形。相交部分由後繪製的圖形填充(顏色,漸變,紋理)覆蓋
destination-atop 在後繪製的圖形頂部顯示先繪製的圖形。源圖像之外的目標圖像部分不會被顯示。
destination-in 在後繪製的圖形中顯示先繪製的圖形。只繪製相交部分,由先繪製圖形的填充覆蓋,其餘部分透明
destination-out 只有後繪製的圖形外的目標圖像部分會被顯示,源圖像是透明的。
destination-over  相交部分由先繪製圖形的填充(顏色,漸變,紋理)覆蓋.
lighter 相交部分由根據先後圖形填充來增加亮度。
copy
顯示後繪製的圖形。只繪製後繪製圖形。
xor 相交部分透明

以上效果圖的代碼如下:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title></title>
 6     <script src="../js/jquery-1.12.4.min.js"></script>
 7     <script>
 8         $(function(){
 9             var options = new Array(
10                     "source-atop",
11                     "source-in",
12                     "source-out",
13                     "source-over",
14                     "destination-atop",
15                     "destination-in",
16                     "destination-out",
17                     "destination-over",
18                     "lighter",
19                     "copy",
20                     "xor"
21             );
22             var str="";
23             for(var i=0;i<options.length;i++){
24                  str = "<div id='p_"+i+"' style='float:left'>"+options[i]+"<br/><canvas id='canvas"+i+"' width='120px' height='100px' style='border:1px solid #ccc;margin:10px 2px 20px;'></canvas></div>";
25                 $("body").append(str);
26                 var cas = document.getElementById('canvas'+i);
27                 var ctx = cas.getContext('2d');
28                 ctx.fillStyle = "orange";
29                 ctx.fillRect(10,10,50,50);
30                 ctx.globalCompositeOperation = options[i];
31                 ctx.beginPath();
32                 ctx.fillStyle = "pink";
33                 ctx.arc(50,50,30,0,2*Math.PI);
34                 ctx.fill();
35             }
36         })
37     </script>
38 </head>
39 <body></body>
40 </html>
圖形合成

 9、給圖形繪製陰影

代碼如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>canvas基礎api</title>
 6     <style>
 7         canvas{
 8             border:1px solid #ccc;
 9             margin:50px;
10         }
11     </style>
12     <script src="../js/jquery-1.12.4.min.js"></script>
13     <script>
14         $(function(){
15             //獲取標簽
16             var cas = document.getElementById('canvas');
17             //獲取繪製環境
18             var ctx = cas.getContext('2d');
19             ctx.fillStyle ="#eef";
20             ctx.fillRect(0,0,300,300);
21             ctx.shadowOffsetX = 10;
22             ctx.shadowOffsetY = 10;
23             ctx.shadowColor = "rgba(100,100,100,0.5)";
24             ctx.shadowBlur = 7;
25             for(var j=0;j<3;j++){
26                 ctx.translate(80,80);
27                 create5star(ctx);
28                 ctx.fill();
29             }
30             function create5star(ctx){
31                 var dx =0;
32                 var dy=0;
33                 var s=50;
34                 ctx.beginPath();
35                 ctx.fillStyle ='rgba(255,0,0,0.5)';
36                 var x =Math.sin(0);
37                 var y =Math.cos(0);
38                 var dig = Math.PI/5*4;
39                 for(var i=0;i<5;i++){
40                     x=Math.sin(i*dig);
41                     y=Math.cos(i*dig);
42                     ctx.lineTo(dx+x*s,dy+y*s)
43                 }
44                 ctx.closePath();
45                 ctx.fill();
46             }
47 
48         })
49     </script>
50 </head>
51 <body>
52     <canvas id="canvas" width="300" height="300">您的瀏覽器不支持canvas</canvas>
53 </body>
54 </html>
五角星陰影

 10、canvas使用圖像

語法:ctx.drawImage(imgobj,left,top,width,height)

 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>canvas基礎api</title>
 6     <style>
 7         canvas{
 8             border:1px solid #ccc;
 9         }
10     </style>
11     <script src="../js/jquery-1.12.4.min.js"></script>
12     <script>
13         $(function(){
14             //獲取標簽
15             var cas = document.getElementById('canvas');
16             //獲取繪製環境
17             var ctx = cas.getContext('2d');
18             //導入圖片
19             var img = new Image();
20             img.src="../images/002.png";
21             //圖片載入完之後,再開始繪製圖片
22             img.onload = function(){
23                 //繪製圖片ctx.drawImage(imgobj,left,top,width,height)
24                 ctx.drawImage(img,100,50,300,200)
25             }
26 
27         })
28     </script>
29 </head>
30 <body>
31     <canvas id="canvas" width="500" height="300">您的瀏覽器不支持canvas</canvas>
32 </body>
33 </html>
使用圖片
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 Express 是基於 Node.js 平臺的 web 應用開發框架,在學習了 Node.js 的基礎知識後,可以使用 Express 框架來搭建一個 web 應用,實現對資料庫的增刪查改。 資料庫選擇 MongoDB,它是一個基於分散式文件存儲的開源資料庫系統,Mongoose 是 Mong ...
  • 一直想寫這篇“十日談”,聊聊我對Web前端開發的體會,順便解答下周圍不少人的困惑和迷惘。我不打算聊太多技術,我想,通過技術的歷練,得到的反思應當更重要。 我一直認為自己是“初級”前端開發工程師,一方面我入道尚淺,只有短短幾年,另一方面我自知對技術的鑽研並不深入,可能是由於環境的原因,當然最重要的是, ...
  • 對於Node.js新手,搭建一個靜態資源伺服器是個不錯的鍛煉,從最簡單的返迴文件或錯誤開始,漸進增強,還可以逐步加深對http的理解。那就開始吧,讓我們的雙手沾滿網路請求! Note: 當然在項目中如果有使用express框架,用 "express.static" 一行代碼就可以達到目的了: 這裡我 ...
  • 認識less和webstrom的less配置 今天完成的事情: 首先第一件事情是,整理一下常用的顏色攝取 #F1F1F1 google的設置頁面的body的背景顏色 #FFF 為google的內容塊的背景顏色 另外就是學習test11中提到的less 一。跳出less和sass的戰鬥。網上一大堆的互 ...
  • 在 Update ueditor.config.js 文件中,xssFilter導致插入視頻異常,編輯器在切換源碼的過程中過濾掉img的_url屬性(用來存儲視頻url)_src/plugins/video.js里處理的是_url,而不是_src。 修改ueditor.config.js: img: ...
  • Ajax type這個裡面填什麼呢?通常大家都會說get和post。那麼還有2個是什麼呢 (預設: "GET") 請求方式 ("POST" 或 "GET"), 預設為 "GET"。註意:其它 HTTP 請求方法,如 PUT 和 DELETE 也可以使用,但僅部分瀏覽器支持。 此處是網上找來的解釋 1 ...
  • [1]引入 [2]代理和反射 [3]陷阱代理 [4]可撤銷代理 [5]模仿數組 [6]將代理用作原型 ...
  • 第一次在博客園寫博客,想把自己每一天學習到的知識點記錄下來,心裡有點緊張(PS:不知道自己能不能寫好......嘿嘿)。言歸正傳,咱們先來說說“ECMAScript”這到底是啥玩意兒?它和javascript的關係又是如何的?首先,在1996年11月的時候,javascript的創造者(網景公司Ne ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...