四周搞定《JavaScript 高級程序設(shè)計》 - 讀書筆記(Day 20)

第15章 使用 Canvas 繪圖

15.1 基本用法

取得繪圖上下文:

var  drawing = document.getElementById("drawing");

// 確定瀏覽器支持 canvas 對象
if (drawing.getContext) {
  var context = drawing.getContext("2d");
}

在使用 canvas 元素之前,首先要檢測 getContext() 方法是否存在,有些瀏覽器會為 HTML 規(guī)范之外的元素創(chuàng)建默認(rèn)的 HTML 元素對象,這樣的情況下,即使 drawing 變量中保存著一個有效的元素引用,也檢測不到 getContext() 方法。

使用 toDataURL() 方法,可以導(dǎo)出在 canvas 元素上繪制的圖像,接受一個圖像的 MIME 類型格式,而且適用于創(chuàng)建圖像的任何上下文,取得繪圖中 PNG 格式(默認(rèn)格式)的圖像可以如下操作:

var  drawing = document.getElementById("drawing");

// 確定瀏覽器支持 canvas 對象
if (drawing.getContext) {
  // 取得圖像的數(shù)據(jù)URI
  var imgURI = drawing.toDataURL("image/png");
  // 顯示圖像 
  var image = document.createElement("img");
  image.src = imgURI;
  document.body.appendChild(image);
}

15.2 2D 上下文

15.2.3 繪制路徑

實際繪制路徑:

  • arc(x, y, radius, startAngle, endAngle, counterclockwise):以 (x, y) 為圓心繪制一條弧線,弧線半徑為 radius,起始和結(jié)束角度(用弧度表示)分別為 startAngleendAngle,最后一個參數(shù)表示 startAngleendAngle 是否按逆時針方向計算,值為 false 表示按順時針方向計算。

  • arcTo(x1, y1, x2, y2, radius):從上一點開始繪制一條弧線,到 (x2, y2) 為止,并且以給定的半徑 radius 穿過(x1, y1)

  • bezierCurveTo(c1x, c1y, c2x, c2y, x, y):從上一點開始繪制一條曲線,到 (x, y) 為止,并且以 (c1x, c1y)(c2x, c2y) 為控制點。

  • lineTo(x, y) :從上一點開始繪制一條直線,到 (x, y) 為止。

  • moveTo(x, y) :將繪圖游標(biāo)移動到 (x, y),不畫線。

  • quadraticCurveTo(cx, cy, x, y):從上一點開始繪制一條二次曲線,到 (x, y) 為止,并且以 (cx, cy) 作為控制點。

  • rect(x, y, width, height):從點 (x, y) 開始繪制一個矩形,寬度和高度分別由 widthheight 指定,這個方法繪制的是矩形路徑,而不是 strokeRect()fillRect() 所繪制的獨立得形狀。

15.2.5 變換

可以使用如下方法來修改變換矩陣:

  • rotate(angle):圍繞原點旋轉(zhuǎn)圖像 angle 弧度
  • scale(scaleX, scaleY):縮放圖像,在 x 方向乘以 scaleX,在 y 方向乘以 scaleY。 scaleXscaleY 的默認(rèn)值都是 1.0。
  • translate(x, y) :將坐標(biāo)原點移動到 (x, y)。執(zhí)行這個變換之后,坐標(biāo)(0, 0) 會變成之前由 (x, y) 表示的點。
  • transform(m1_1, m1_2, m2_1, m2_2, dx, dy):直接修改變換矩陣,方式是乘以如下矩陣。
m1_1  m1_2  dx
m2_1  m2_2  dy
0     0     1
  • setTransform(m1_1, m1_2, m2_1, m2_2, dx, dy):將變換矩陣重置為默認(rèn)狀態(tài),然后再調(diào)用 transform()

15.2.11 合成

globalCompositionOperation 可能值:

  • source-over(默認(rèn)):后繪制圖層位于前圖層上方。
  • source-in:圖層重疊部分可見,其他透明。
  • source-out:圖層不重疊部分可見,先繪制層透明。
  • source-atop:圖層重疊部分可見,先繪制不受影響。
  • destination-over:后繪制圖層位于前圖層下方。
  • destination-in:后繪制圖層位于前圖層下方,不重疊部分透明。
  • destination-out:后繪制圖形擦除與先繪制圖形重疊部分。
  • destination-atop:后繪制圖層位于下方,不重疊部分,先繪制層透明。
  • lighter:重疊部分的值相加,使該部分變亮。
  • copy:后繪制圖形替代與之重疊的先繪制圖形。
  • xor:重疊部分執(zhí)行“異或”操作。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第15章 使用 Canvas 繪圖 1. 基本用法 (1) 要使用 元素,必須先設(shè)置其width和 height ...
    yinxmm閱讀 340評論 0 0
  • ??HTML5 添加的最受歡迎的功能就是 元素。這個元素負(fù)責(zé)在頁面中設(shè)定一個區(qū)域,然后就可以通過 JavaScri...
    霜天曉閱讀 3,179評論 0 2
  • 元素負(fù)責(zé)在頁面中設(shè)定一個區(qū)域,然后就可以通過 JavaScript 動態(tài)地在這個區(qū)域中繪制圖形。 一、基本用法 要...
    LemonnYan閱讀 18,800評論 0 7
  • canvas由Apple公司推出,現(xiàn)在大部分瀏覽器支持繪制2D圖形,3D圖形的繪制使用WebGL的3D上下文。 基...
    exialym閱讀 612評論 0 3
  • 熟悉html5的程序員們肯定都知道 元素,該元素是用來在頁面中規(guī)定一塊區(qū)域,然后由js在該區(qū)域內(nèi)繪制圖形。canv...
    米幾V閱讀 2,333評論 1 5

友情鏈接更多精彩內(nèi)容