canvas與svg整理與區別

来源:https://www.cnblogs.com/jinfeixiang/archive/2019/05/21/10902284.html
-Advertisement-
Play Games

1.canvas畫布(點陣圖) 2.繪製矢量圖 1.不要在style中給canvas設置寬高 會有位移差 2. fillRect() 繪製一個填充的方塊 預設顏色是黑色 strokeRect() 繪製帶邊框的方塊 繪製線條 moveTo() 繪製線段起點 lineTo() 繪製線段的領點 每個線條只能 ...


1.canvas畫布(點陣圖)

2.繪製矢量圖

1.不要在style中給canvas設置寬高 會有位移差

2.

         //獲取元素
	var c=document.getElementById("c")
	//獲取繪圖環境
	var c=c.getContext("2d")                                    

  

fillRect() 繪製一個填充的方塊 預設顏色是黑色

strokeRect() 繪製帶邊框的方塊

繪製線條

moveTo() 繪製線段起點

lineTo() 繪製線段的領點

每個線條只能有一個 moveTo可以有多個 lineTo

stroke() 繪製線段

beginPath() closePath() 二者同時出現 將繪製路徑閉合(起始點 結尾點首位相連) 

Rect() 繪製方塊

clearRect(0,0,width,height)清楚畫布

save() restore() 二者成對出現 中間屬性樣式隻影響內部,不影響外部

1.畫圓

c.closePath()
c.fill()
c.restore()
c.moveTo(200,200)
c.arc(200,200,150,0,360*Math.PI/180,true)
c.stroke()

200,200是圓形坐標 50是半徑

0是起始弧度 Math.PI是結束弧度

true是逆時針 flase是順時針

註意:角度有正負之分 順時針角度是正的,逆時針角度是負的

2.畫布的平移和旋轉

平移translate 畫布大小位置不變 起始坐標變了

相當於坐標平移

rotate() 畫布的旋轉都是以00起始點為中心點旋轉

scale(0.5,0.5) 畫布的縮放 就是將畫布向後移動 跟人的視距就變遠了 近大遠小

c.fillStyle='lightpink'
c.scale(0.5,0.5)
c.fillRect(0,0,100,100)

畫布中插入圖片 

//獲取元素
	var c=document.getElementById("c")
	//獲取繪圖環境
	var c=c.getContext("2d")
	
	var img=new Image;
	
	img.src="img/02.jpg"
	img.onload=function(){
		c.drawImage(img,10,20,160,200)
	}

插入字體

//字體大小 樣式
	c.font="30px imapct"
	c.fillText("全站最強",200,200)
	//字體空心
	c.strokeText("Big smile!",200,200)

svg

svg繪製矢量圖

svg使用xml格式繪製圖形

svg要有一個根節點 叫svg標簽 相當於html

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <circle cx="100" cy="50" r="40" stroke="black"
  stroke-width="2" fill="red" />
</svg>

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="400px">
</svg>

  

svg如果不設置大小,預設占用面積 3008*150

1.定義矩形

rect標簽有:

width height 矩形寬高

fill 定義矩形填充顏色(rgb值、顏色名或16進位)

stroke-width 定義矩形邊框寬度

stroke 定義矩形邊框以及顏色

x 定義矩形左側位置(矩形到瀏覽器視窗左側距離)

y 定義矩形頂端位置(矩形到瀏覽器視窗頂端位置)

fill-opacity 定義填充顏色透明度

stroke-opacity 定義邊框顏色透明度

Rx Ry 可以使矩形產生圓角

<!--矩形-->
  			<rect width="100px" height="100px" x="50" y="250" rx="20" ry="20"  style="fill:pink;stroke-width: 5;stroke: red;"></rect>

fill-opactty和opacity的區別?

fill-opacity只改變填充顏色透明度 opacity改變fill和stroke的透明度都改變

2.定義圓

circle cx cy 定義圓點的 x和y坐標。如果省略cx和cy,圓的中心會設置為(0,0)

r定義半徑

<!--圓形-->
<circle cx="200" cy="200" r="50" style="stroke:"pink"; fill:'red';">
</circle>

3.定義橢圓

橢圓和圓很相似。不同之處在於橢圓有不同的x和y半徑,而圓的x和y半徑是相同的

ellipse cx cy定義圓中心的x,y坐標

rx 定義水平半徑

ry 定義垂直半徑

<!--橢圓-->
<ellipse cx="300" cy="340" rx="100" ry="50" style="fill: yellowgreen;"></ellipse>

4.定義直線

line x1 y1 定義起始坐標 x2 y2定義結束坐標 必須結合 stroke

<!----直線---->
<line x1="150" y1="250" x2="100" y2="100" style="stroke: lawngreen;"></line>

5.定義多邊形

polygon poinits=“定義多邊形每個角x和y坐標”

<!--定義多邊形-->
<polygon points="240,10 330,190 290,210" style="fill: pink; stroke: red;">
</polygon>

6.定義曲線(折線)

polyline poinits“折點的坐標

<!--曲線-->
<polyline points="0,40 40,40 40,80 80,80 80,120 120,120 120,160 "style="stroke-width:5 ; stroke: pink; fill: none; ">

7.定義路徑

d=“定義路徑指令”

M 是起點坐標

L 是相鄰點坐標

Z是讓路徑構成閉合迴路

H代表水平劃線 預設y軸上值一模一樣

V 代表垂直的線條 預設x軸上值一樣

A 後面跟七個值

<!--定義路徑-->	
<path id="path" d="M100 50 A60 60 0 1 0  300 50 " stroke="red" fill="none"></path>

  

8.g 用於相關元素進行組合

<g fill="pink" stroke="black" cx="60" cy="50" transform="translate(100,50)">
<circle  r="30" ></circle>
<circle  r="10" fill="blue" ></circle>		
</g>

g身上的屬性 子元素都會繼承 但是g上的屬性都必須顯現屬性,不是svg的私有屬性,比如g上的圓心坐標不行

transform 轉換svg中的一個屬性 translate rotate scale 

平移旋轉 都是以起點 0 0 (svg的左上角) 點為參考點 而css3中以元素的中心點為參考點

text 用於定義文本 xy xy的值在字體左下角

<!----txte---->
<text stroke="blue" x="400" y="400" font-size="20" text-anchor="middle">哈哈哈哈</text>

9.繪製圖片

<!----image---->
<image x="80" y="80" width="100" height="100" xlink:href="02.jpg"></image>

 10.use 用於複製元素 xy

xy是相對原始元素的坐標位置 不是相對svg的00點坐標

<!----use---->
<circle cx="40" id="a" cy="40" r="10" translate="100,0" fill="blue"></circle>
<use x="10" y="10" xlink:href="#a"></use>

11.animate 寫在需要動畫元素的中間

<circle cx="250" cy="310" r="15" fill="lightblue">
<animate attributeName="cy" from="310" to="690" dur="2s" repeatCount="indefinite">
</circle>

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

  

 

 

 

 

 

 

 

 

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • Android Studio必須手動配置許可權: 如添加許可權 : android.permission.RECEIVE_BOOT_COMPLETED 1 1.android.permission.WRITE_USER_DICTIONARY 2 允許應用程式向用戶詞典中寫入新詞 3 4 2.androi ...
  • 1.Mtk Webview的作用:敝司內部load都是雙webview配置。其中mtk webview主要是給mtk browser使用。裡面主要是對browser一些必須功能的支持,此外還有一些webview的bug fix2.設置web view:可以從settings選擇預設使用的webvie ...
  • 本文以一個簡單的小例子,簡述在微信小程式開發中左右佈局功能的實現方式,主要涉及scroll-view ,列表數據綁定,及簡單樣式等內容,僅供學習分享使用。 ...
  • 一、前言 前端路由是什麼?如果你之前從事的是後端的工作,或者雖然有接觸前端,但是並沒有使用到單頁面應用的話,這個概念對你來說還是會很陌生的。那麼,為什麼會在單頁面應用中存在這麼一個概念,以及,前端路由與我們後端的路由有什麼異同呢。本章,我們就來簡單介紹下前端路由的概念,以及如何在 Vue 中使用 V ...
  • 寫在前面:CSS選擇器 網頁要顯示很多內容,想要為每個內容設置不同的樣式,我們就得首先選中要設置樣式的內容,CSS選擇器就是指明該樣式是針對HTML里哪一個元素的。簡單的例子,網頁上有幾段文字,我們想把第一段文字調成紅色的,在用CSS寫完紅色文字樣式後,是不是得指明該紅色文字樣式是針對第一段文字的, ...
  • 1.組件是什麼 組件系統是 Vue 的一個重要概念,因為它是一種抽象,允許我們使用小型、獨立和通常可復用的組件構建大型應用。通常一個應用會以一棵嵌套的組件樹的形式來組織; 1.1組件的聲明及使用 全局組件 局部組件 1.2組件使用註意事項 組件名如果是駝峰法命名,使用組件時要將大寫字母改為小寫,並且 ...
  • html 主要的標簽的介紹: <head></head>標簽裡面是放的是思想,設置瀏覽器用的,是人看不到的 編碼字元集:gb2312 國家編碼字元集(簡體,亞裔字元集) gbk(gb2312+繁體) unicode 是萬國碼,包括了所有國家的語言 uft-8 是 unicode 一般放的是<meta ...
  • es6 generator函數,我們都知道asycn和await是generator函數的語法糖,那麼genertaor怎麼樣才能實現asycn和await的功能呢? 1.thunk函數 將函數替換成一個只接受回調函數作為參數的單參數函數 2.generator非同步編程的示例 使用while去讓上面 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...