canvas常用屬性方法由淺上浮

来源:https://www.cnblogs.com/wumon/archive/2018/08/17/9495630.html
-Advertisement-
Play Games

首先引入<canvas></canvas>標簽就不必說了。 其次就是得到canvas的2d環境了( var ctx = canvasDom.getContent('2d') )。 現在呢,你可能想畫點什麼東西。畫東西之前你要確定好一些東西,比如: ctx.fillStyle 這是一個用來確定填充顏色 ...


首先引入<canvas></canvas>標簽就不必說了。

其次就是得到canvas的2d環境了( var ctx = canvasDom.getContext('2d') )。

現在呢,你可能想畫點什麼東西。畫東西之前你要確定好一些東西,比如:

  ctx.fillStyle  這是一個用來確定填充顏色的屬性。(帶fill都和填充有關)

  ctx.strokeStyle  這是一個用來確定"筆路徑"(就像是線條)的屬性。(帶stroke都和描線有關)

  ctx.shadow++  這是有4個設置所畫圖形陰影的屬性(shadowColor,shadowBlur,shadowOffsetX,shadowOffsetY),我不常用,略。

  ctx.lineWidth  這是4個設置線條樣式的屬性(lineCap,lineJoin,lineWidth,miterLimit)中最常用的,設置線寬,值為帶px的string。

  ctx.font  這是設置文本()的字體大小和字體樣式,值可以是"30px",也可以是"30px  Microsoft yahei"。同時配合ctx.textAlign和ctx.baseline設置對齊位置和基線位置(什麼是基線?百度吧)。然後通過ctx.filltext()或者ctx.strokeText()繪製文字,還有ctx.measureText()返回一個對象,裡面包含文本的信息,比如width,height。

瞭解了上面這些基礎屬性後,你就可以畫點什麼了:

  想要顯示點什麼東西,流程大概是先弄路徑(路徑是看不見的),然後再通過ctx.fill()或ctx.stroke來對路徑進行填充或描線。

  你可以用ctx.rect(x,y,width,height)或ctx.arc(x,y,radius,startAngle,endAngle,anticolorwise)先弄一個路徑,然後在fill或者stroke。

  當然矩形有ctx.fillRect()和ctx.strokeRect()直接弄一個可見的方形。(圓沒有這兩個方法)

  最後再介紹一個黑板擦--ctx.clearRect(x,y,weight,height),用來清除該方框內的所有像素。

  還有一個為了防止之前的路徑干擾,可以在每次畫之前都ctx.beginPath()來清掉之前的路徑。

以上就是基本的canvas的使用,下麵就來聊點高(yong)級(bu)點(shang)的。

  矩形樣式的漸變填充:

    var grd = ctx.createLinearGradient(x0,y0,x1,y1);

    grd.addColorStop(0,"black");

    grd.addColorStop(1,"white");

    ctx.fillstyle = grd;

    ctx.fillRect(x,y,w,h);

    這一趟下來相當於是先預定義了一個漸變樣式(可填充或者描線),將樣式設置好後進行填充或者描線。

    還有createRadialGradient()配合addColorStop設置放射狀的樣式。

  媒體(圖片、視頻、其他canvas)的填充:

    var img = imgDom;

    var pat = ctx.createPattern(img,"repeat");

    然後這個pat就可以給ctx.++Style,從而進行填充或者描線等。

    其中pattern有四種:repeat(預設),repeat-x,repeat-y,no-repeat。

  自定義路徑:

    利用ctx.moveTo(x,y);把路徑起點移動到(x,y) ,然後配合lineTo(x,y),就可以得到路徑,就可以描線顯示出來。

    當然如果你想填充,但是可能路徑沒有閉合,可以利用ctx.closePath()閉合路徑,然後進行填充。

  畫布切割:

    使用ctx.clip()可以根據當前已閉合的路徑來剪切畫布,被剪切的畫布部分就不能被操作了。

    可以通過ctx.save()對當前區域先進行保存,然後通過ctx.restore()進行恢復。

  畫圓弧:

    畫圓弧通過ctx.arcTo(x0,y0,x1,y1,radius);通過兩點和半徑確定弧線,來得到路徑,然後根據需要填充或者描線。

  判斷點是否在路徑內:

    ctx.isPointInPath();返回布爾值,沒啥好說的。

  有一種曲線叫 貝塞爾:

    先用ctx.moveTo()移至起始點。

    ctx.quadraticCurveTo(c1x,c1y,edx,edy);利用起點和一個控制點加終點的貝塞爾曲線;

    ctx.beizierCurveTo(c1x,c1y,c2x,c2y,edx,edy);利用兩個控制點繪製的貝塞爾曲線。

  圖形轉換:

    ctx.scale(w,h);放大w>1就是寬度上放大,h就是高度上。

    ctx.rotate(r);r為弧度單位,如20度:20*Math.PI/180。順時針。

    ctx.translate(x,y)設置畫布上(0,0)的位置,(x,y)就是當前(0,0)的位置。

    ctx.transform(a,b,c,d,e,f);分別是水平縮放、水平傾斜、垂直傾斜、垂直縮放、水平位移、垂直位移。該屬性會疊加,對下一個圖形有效。

    ctx.setTransform(a,b,c,d,e,f);同上,該屬性會重新定義一個transform,對下一個圖形有效。

  drawImage():

    ctx.drawImage(dom,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8);除了dom外最多還可以傳8個參數,傳2個是定點陣圖像(原尺寸),傳4個是按大小定點陣圖像,傳8個是剪切後定點陣圖像(分別是:剪切開始x,y,剪切大小w,h,定位位置x,y,大小w,h)。

  globalAipha屬性:設置全局透明度。(已經畫好的不受影響)。

  globalCompositeOperation 屬性 設置上一個和下一個重疊區的層疊順序,有"source-over","destination-over",哪個over,哪個在下麵。

更多詳情,可以參考W3C


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

-Advertisement-
Play Games
更多相關文章
  • 系統架構分析 體繫結構 安卓結構有四大層,五個部分, 分四層為: 應用層 ,應用框架層 ,系統運行層 和`Linux`內核層。 那麼我來講講應用層有什麼? 就是一些應用軟體,如首頁,聯繫人,電話,瀏覽器等等;應用框架如何理解? 應用框架層是用 寫的,有事件管理器, 管理器,內容提供,查看系統 ,消息 ...
  • 所謂“工欲善其事,必先利其器”。Android Studio 是谷歌推出一個Android集成開發工具,基於IntelliJ IDEA. 類似 Eclipse ADT,Android Studio 提供了集成的 Android 開發工具用於開發和調試。 在IDEA的基礎上,Android Studi ...
  • 一.什麼是模塊化 什麼是模塊化呢?有一種定義是:模塊化是一種處理複雜系統分解為更好的可管理模塊的方式。由此可見,模塊化思路下構成的複雜系統是由各個可管理的子模塊構成的,每個子模塊之前相互獨立,並通過某種特定的方式進行通信。在工業上面,有模塊化汽車的概念,也有模塊化手機的概念,各個模塊根據一定的標準進 ...
  • Android線程間的通信是使用消息機制來實現的。線程通過Looper建立自己的消息迴圈, 對應MessageQueue。 MessageQueue是FIFO的消息隊列。Looper負責從MessageQueue中取出消息,並且分發到消息指定的目標Handler對象,由Handler對象對Messa ...
  • 自定義SurfaceView 主要步驟: 實現SurfaceHolder.Callback介面,創建SurfaceView的生命周期 實現Camera.PreviewCallback介面,創建預覽回調介面 創建Camera打開相機 實例: FrameCallback回調介面 MainActivity ...
  • 一.Jquery的基本功能 二.Jquery選擇器 主要分為四種,分別是基本選擇器,層次選擇器,過濾選擇器,和表單選擇器,其中當屬基本選擇器用途最廣泛。 1.基本選擇器 類似於getElemenById(“”)<=>$("") 常用的有$("*"),$("#id"),$(".class"),$("p ...
  • 前言: 本人安裝nginx-echo-module的初衷是之前遇到過一些時候,雖然有配置location規則,但是卻在瀏覽器訪問時,出現錯誤等未匹配或不符合預期的情況,想要知道,實際上是否有匹配哪條location規則,但是nginx的日誌卻只能記錄請求url,所以,看到echo輸出就很開心,畢竟感 ...
  • 從零開始,用最少的配置、最少的代碼、最少的依賴來搭建一個最簡單的webpack+react環境 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...