html5 canvas繪製圓形印章,以及與頁面交互

来源:http://www.cnblogs.com/hello-word1/archive/2016/01/17/5137626.html
-Advertisement-
Play Games

1 2 3 4 5 HTML5 Canvas畫印章 6 7 8 9 印章文字: 10 11 12 13 14 15 16 114 115 canvas剛剛開始學習,還不是很理解,從網上搜...


  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4  <meta charset="UTF-8">
  5  <title>HTML5 Canvas畫印章</title>
  6  <script type="text/javascript" src="../JQmain/jquery-2.2.0.min.js"></script>
  7 </head>
  8 <body>
  9     <lable style="display: inline-block;margin:50px;font-size: 18px;">印章文字: 
 10     <input type="text" id="textname" style="height: 30px;width: 200px;" />
 11     </lable>
 12     <input type="button" id="changename" value="修改" />
 13     <div>  
 14     <canvas id="canvas" width="400" height="400" style="margin-left: 130px;border: 1px solid #666666;"></canvas>
 15     </div>
 16 <script>
 17   // canvas繪製圖像的原點是canvas畫布的左上角
 18    var canvas = document.getElementById("canvas");  
 19    var context = canvas.getContext('2d');
 20 
 21    $("body").on("click","#changename",function(){
 22            drawText($("#textname").val());
 23            EvenCompEllipse(context1, canvas1.width/2, canvas1.height/2, 100, 50);
 24    });
 25    // 繪製圓形印章
 26    function drawText(companyName="智慧應用軟體工作室") {
 27           // 清除畫布法一
 28           context.globalAlpha=1;
 29           context.fillStyle="#ffffff";
 30           context.fillRect(0,0,400,400);
 31 
 32 
 33        var text = "以升大學生創新實驗中心";
 34        var companyName = companyName;
 35       
 36       // 繪製印章邊框   
 37        var width = canvas.width / 2;
 38        var height = canvas.height / 2;
 39        context.lineWidth = 5;
 40        context.strokeStyle = "#f00";
 41        context.beginPath();
 42        context.arc(width, height, 90, 0, Math.PI * 2);//寬、高、半徑
 43        context.stroke();
 44 
 45        //畫五角星
 46        create5star(context,width,height,25,"#f00",0);
 47 
 48         // 繪製印章名稱   
 49         context.font = '8px 宋體';
 50         context.textBaseline = 'middle';//設置文本的垂直對齊方式
 51         context.textAlign = 'center'; //設置文本的水平對對齊方式
 52         context.lineWidth=1;
 53         context.fillStyle = '#f00';
 54         context.save();
 55         context.translate(width,height+60);// 平移到此位置,
 56         context.scale(1,2);//伸縮要先把遠點平移到要寫字的位置,然後在繪製文字
 57         context.fillText(text,0,0);//原點已經移動
 58         context.restore();
 59 
 60         // 繪製印章單位   
 61         context.translate(width,height);// 平移到此位置,
 62         context.font = '18px 宋體'
 63         var  count = companyName.length;// 字數
 64         var  angle = 4*Math.PI/(3*(count - 1));// 字間角度   
 65         var chars = companyName.split("");
 66         var c;
 67        for (var i = 0; i < count; i++) {
 68            c = chars[i];// 需要繪製的字元 
         //繞canvas的畫布圓心旋轉
69 if (i == 0) { 70 context.rotate(5 * Math.PI / 6); 71 } else{ 72 context.rotate(angle); 73 } 74 context.save(); 75 context.translate(66, 0);// 平移到此位置,此時字和x軸垂直,公司名稱和最外圈的距離 76 context.rotate(Math.PI / 2);// 旋轉90度,讓字平行於x軸 77 context.scale(1,2);//伸縮畫布,實現文字的拉長 78 context.fillText(c, 0, 0);// 此點為字的中心點 79 context.restore(); 80 } 81 // 設置畫布為最初的位置為原點,旋轉回平衡的原位置,用於清除畫布 82 context.rotate(-Math.PI/6); 83 context.translate(0-canvas.width/2,0-canvas.height/2); 84 85 86 87 //繪製五角星 88 /** 89 * 創建一個五角星形狀. 該五角星的中心坐標為(sx,sy),中心到頂點的距離為radius,rotate=0時一個頂點在對稱軸上 90 * rotate:繞對稱軸旋轉rotate弧度 91 */ 92 function create5star(context, sx, sy, radius, color, rotato) { 93 context.save(); 94 context.fillStyle = color; 95 context.translate(sx, sy);//移動坐標原點 96 context.rotate(Math.PI + rotato);//旋轉 97 context.beginPath();//創建路徑 98 var x = Math.sin(0); 99 var y = Math.cos(0); 100 var dig = Math.PI / 5 * 4; 101 for (var i = 0; i < 5; i++) {//畫五角星的五條邊 102 var x = Math.sin(i * dig); 103 var y = Math.cos(i * dig); 104 context.lineTo(x * radius, y * radius); 105 } 106 context.closePath(); 107 context.stroke(); 108 context.fill(); 109 context.restore(); 110 } 111 } 112 113 </script> 114 </body> 115 </html>

canvas剛剛開始學習,還不是很理解,從網上搜了很多的例子,也結合了自己的理解,如果有不足還請哪位大神指正。

因為對旋轉和平移理解還不夠,畫布的清除在旋轉上也不是很好,希望哪位走過路過的大神能夠給予指點,小弟萬分感謝。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • process,字面意義,進程,看看它的結構 1 struct process { 2 struct process *next; 3 #if PROCESS_CONF_NO_PROCESS_NAMES 4 #define PROCESS_NAME_STRING(process) "" ...
  • 大家在寫程式的時候,可能會聽聞,什麼獨熱碼,什麼格雷碼,什麼二進位碼等等,本節意在解釋這幾種編碼之間的區別和優勢以及用verilog怎麼去實現,下麵先介紹這幾種編碼的區別。1 基礎理論部分1.1 獨熱碼 獨熱碼,在英文文獻中稱做 one-hot code, 直觀來說就是有多少個狀態就有多少比特,而....
  • 前言 這裡分享兩個使用Spring MVC進行文件上傳的簡單示例, 分別整合 "bootstrap fileinput" 和 "Jquery File Upload" , 代碼十分簡單, 都是入門的示例,因此這裡只給出運行的截圖以及代碼地址, 如果有興趣的可以下載下來運行一下, 開發工具使用的是i....
  • 2、python實現文件下載(1)方法一、直接用a標簽的href+資料庫中文件地址,即可下載。缺點:word excel是直接彈框下載,對於image txt 等文件的下載方式是直接在新頁面打開。(2)方法二、在python後臺對下載內容進項處理,返回內容直接彈出下載框。 1 #後臺處理函數 2 d...
  • Product Description RTX內核提供了基本的功能,可以創建和註銷任務進程。同時RTX內核還提供了一些額外的功能,用於任務進程之間的通信。利用這些通信功能,可以同步任務進程,管理系統公用的資源(例如外設或者記憶體),在任務進程之間傳遞消息。 開發者可以設置任務進程的調度優先順序。 RTX...
  • 意圖 0 適用性 1 結構 2 實現 3 效果 4 參考 5意圖用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯示地相互引用,從而使其耦合鬆散,而且可以獨立地改變他們之間的交互。適用性一組對象以定義良好但是複雜的方式進行通信。產生的相互依賴關係結構混亂且難以理解。一個對象引...
  • RTX內核library可以使用在以下ARM設備上: ARM7 and ARM9 Cortex-M0/M1, Cortex-M3, Cortex-M4, and Cortex-R4 Cortex-M處理器擁有增強的RTOS特性。這些特性使得RTX的內核移植過程更加自動化和低錯誤率。 上述兩類處理器的...
  • 一直專註於PC網站的開發,不曾接觸手機網站,於今日機緣巧合也是公司業務需要,併在之前學習過flex的佈局,於是一併實踐。碰到的問題還是很多的,主要是談談flex佈局。flex佈局是css3里的內容,一種新的佈局方式,也稱之為 彈性佈局,主要是為了取代 inline-bolck 和float 為總佈局...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...