Canvas API

Canvas

功能

在網(wǎng)頁(yè)中實(shí)時(shí)生成圖像饥伊,并操作圖像內(nèi)容(通俗就是在網(wǎng)頁(yè)中畫畫)

  1. canvas畫布可以制作在線繪圖工具,
  2. canvas畫布可以制作動(dòng)態(tài)數(shù)據(jù)圖紙.常用于網(wǎng)站后臺(tái)的數(shù)據(jù)統(tǒng)計(jì)功能.
  3. canvas畫布可以用于制作HTML5游戲
  4. canvas畫布可以制作app應(yīng)用.....

格式

<canvas id=“myCanvas” width=“500” height=“300”></canvas>

注意:
    1.IE9+瀏覽器支持
    2.默認(rèn)300寬度事甜,150高度
    3.不要使用css給canvas設(shè)置寬度和高度-導(dǎo)致繪制的圖形被縮放

使用:
    1.獲取Canvas對(duì)象(即畫布)
    var obj = document.querySelector('canvas');
        obj.width:畫布寬度
        obj.height:畫布高度
    2.獲取繪圖環(huán)境:所有的繪圖都以此為基礎(chǔ)
    var ctx = obj.getContext('2d');

Canvas繪圖圖形

直線

方法:
moveTo(x,y):將鼠標(biāo)移動(dòng)到指定的點(diǎn)
lineTo(x,y):將畫筆移動(dòng)到指定x,y點(diǎn),形成一條直線
stroke():將點(diǎn)繪制成直線

屬性:
lineWidth:直線的厚度
strokeStyle:直線(邊框)的顏色
lineCap:直線頭尾的樣式(不占據(jù)原來(lái)直線的長(zhǎng)度)
    butt:默認(rèn)
    round:圓形
    square:方形(多出寬度一半的值)
lineJoin:兩條直線的夾角的樣式
    miter:默認(rèn)尖角
    round:圓形
    bevel:斜角

虛線

moveTo(100,100)
lineTo(400,100)
setLineDash([5,10])        5:線段的長(zhǎng)度    10:線段的間距
setLineDash([5,10,15])        復(fù)制一份數(shù)組元素妓灌,循環(huán)繪制
setLineDash([5,10,15,20])    奇數(shù)線段長(zhǎng)度,偶數(shù)線段間距

矩形

屬性:
fillStyle : 填充顏色
strokeStyle : 矩形邊框顏色

方法:
fillRect(x霞篡,y株婴,w溺欧,h) : 繪制矩形框并填充顏色
strokeRect(x,y茴丰,w达皿,h) : 繪制矩形框設(shè)置邊框的顏色
clearRect(x,y贿肩,w峦椰,h) : 清空指定矩形內(nèi)容

圓弧(圓形)

arc(x,y汰规,radius汤功,start,end溜哮,逆true|順false) : 繪制圓
    x,y:圓心橫坐標(biāo)
    radisu:圓半徑
    start:開始弧度
    end:結(jié)束弧度
    逆|順:順時(shí)針繪制|逆時(shí)針繪制

canvas很多都是利用弧度進(jìn)行計(jì)算的
角度和弧度計(jì)算公式:弧度 = 角度*Math.PI/180
    全圓:2PI(360)
    半圓:PI(180)
    1/4圓:PI/2(90)

曲線

moveTo(移動(dòng)到指定位置的橫坐標(biāo)滔金,指定位置的縱坐標(biāo))
arcTo(第一組控制點(diǎn)的橫坐標(biāo),縱坐標(biāo)茂嗓,第二組控制點(diǎn)的橫坐標(biāo)餐茵,縱坐標(biāo),圓弧的半徑)

二次貝塞爾曲線
quadraticCurveTo(第一組控制點(diǎn)橫坐標(biāo)述吸,第一組控制點(diǎn)縱坐標(biāo)忿族,第二組控制點(diǎn)橫坐標(biāo),第二組控制點(diǎn)縱坐標(biāo))
context.moveTo(100,200);
context.quadraticCurveTo(200,100,400,300);

三次貝塞爾曲線
bezierCurveTo(第一組控制點(diǎn)橫坐標(biāo),縱坐標(biāo)肠阱,第二組控制點(diǎn)橫坐標(biāo)票唆,縱坐標(biāo),第三組控制點(diǎn)橫坐標(biāo)屹徘,縱坐標(biāo)):三組控制點(diǎn)來(lái)掌控曲線方向
context.moveTo(100,200);
context.bezierCurveTo(150,150,300,300,400,100);

文本

方法
fillText(text, x, y, [maxWidth]):填充方式繪制文本
strokeText(text, x, y, [maxWidth]):繪制文字邊框顏色

文本屬性
font屬性:跟CSS一樣
textAlign屬性:設(shè)置文字水平對(duì)齊方式
    start(默認(rèn)) end left right center
textBaseline屬性:文本垂直方式
    top hanging middle alphabetic(默認(rèn)) ideographic bottom
        懸掛             字母排序    思想的
measureText():獲取文本的寬度

Canvas全局方法

beginPath():開啟路徑
closePath():關(guān)閉路徑

Canvas坐標(biāo)系統(tǒng):默認(rèn)坐標(biāo)原點(diǎn)是元素的左上角位置(0走趋,0)
translate():平移(橫坐標(biāo),縱坐標(biāo))
    注意:將坐標(biāo)原點(diǎn)移動(dòng)到指定位置

scale(水平縮放倍數(shù)噪伊,垂直縮放倍數(shù)):縮放

rotate(弧度):旋轉(zhuǎn)的弧度
    注意:如果要旋轉(zhuǎn)簿煌,默認(rèn)是以坐標(biāo)原點(diǎn)旋轉(zhuǎn)的,所以如果要旋轉(zhuǎn)鉴吹,必須確認(rèn)坐標(biāo)原點(diǎn)在哪里

save():保存之前的狀態(tài)
restore():恢復(fù)保存之前的樣式
將這兩個(gè)方法之間的代碼獨(dú)立姨伟,里面的樣式設(shè)置不會(huì)帶外面的繪制產(chǎn)生影響

剪輯區(qū)域
    clip() 用于設(shè)定剪輯的區(qū)域
    注意:使用clip進(jìn)行了路徑剪輯之后所有操作只能在剪輯區(qū)域之內(nèi)進(jìn)行操作。
    使用剪輯區(qū)域一般都會(huì)在save和restore之間進(jìn)行操作豆励。

toDataURL():返回當(dāng)前canvas圖像的URLdata信息

Canvas全局屬性

屬性:
globalAlpha:設(shè)置全局的透明度
    globalCompositeOperation:圖片合成:
    source-over 默認(rèn)夺荒。在目標(biāo)圖像上顯示源圖像。
    source-atop 在目標(biāo)圖像頂部顯示源圖像良蒸。源圖像位于目標(biāo)圖像之外的部分是不可見的技扼。
    source-in 在目標(biāo)圖像中顯示源圖像。只有目標(biāo)圖像內(nèi)的源圖像部分會(huì)顯示嫩痰,目標(biāo)圖像是透明的剿吻。
    source-out  在目標(biāo)圖像之外顯示源圖像。只會(huì)顯示目標(biāo)圖像之外源圖像部分串纺,目標(biāo)圖像是透明的丽旅。
    
    destination-over  在源圖像上方顯示目標(biāo)圖像。
    destination-atop  在源圖像頂部顯示目標(biāo)圖像纺棺。源圖像之外的目標(biāo)圖像部分不會(huì)被顯示榄笙。
    destination-in  在源圖像中顯示目標(biāo)圖像。只有源圖像內(nèi)的目標(biāo)圖像部分會(huì)被顯示五辽,源圖像是透明的办斑。
    destination-out 在源圖像外顯示目標(biāo)圖像外恕。只有源圖像外的目標(biāo)圖像部分會(huì)被顯示杆逗,源圖像是透明的。
    lighter 顯示源圖像 + 目標(biāo)圖像鳞疲。
    copy  顯示源圖像罪郊。忽略目標(biāo)圖像。

線性漸變:指定區(qū)間的顏色過渡
    var color = context.createLinearGradient(起始點(diǎn)橫坐標(biāo)尚洽,起始點(diǎn)縱坐標(biāo)悔橄,寬度,高度)
    color.addColorStop(偏移值,顏色)

徑向漸變(兩個(gè)圓心的連線進(jìn)行顏色過渡癣疟,兩個(gè)圓的切線的焦點(diǎn)處進(jìn)行顏色的擴(kuò)散)
    var color = context.createRadialGradient(開始圓心橫坐標(biāo)挣柬,圓心縱坐標(biāo),半徑睛挚,結(jié)束圓圓心橫坐標(biāo)邪蛔,結(jié)束圓圓心縱坐標(biāo),結(jié)束圓的半徑);
    color.addColorStop(偏移值扎狱,顏色)

陰影
    陰影顏色
    context.shadowColor = 'red';
    陰影偏移值
    context.shadowOffsetX = 20;
    context.shadowOffsetY = 20;
    設(shè)置模糊值
    context.shadowBlur = 4;

圖片對(duì)象

將圖片繪制到canvas畫布中
drawImage(obj,起始橫坐標(biāo)侧到,縱坐標(biāo),[固定寬度]淤击,[固定高度]);

創(chuàng)建圖片并設(shè)置圖片是否重復(fù)
var bg = createPattern(obj,'repeat|repeat-x|repeat-y|no-repeat'):指定的方向內(nèi)重復(fù)指定的元素
ctx.fillStyle = bg;

像素操作
// 獲取canvas畫布 指定區(qū)間位置 的 像素點(diǎn)集合對(duì)象
var obj = ctx.getImageData(起始橫坐標(biāo)匠抗,起始縱坐標(biāo),寬度污抬,高度)
obj.width:行像素個(gè)數(shù)
obj.height:列像素個(gè)數(shù)
obj.data:整體像素組的顏色組成的數(shù)組
obj.data.length:像素個(gè)數(shù)的4倍(1個(gè)像素點(diǎn)4個(gè)顏色值)
    rgba()都是0-255的范圍汞贸,透明度也是

// 將圖像obj寫入到指定的canvas區(qū)間內(nèi)
putImageData(obj,起始橫坐標(biāo),起始縱坐標(biāo))

// 創(chuàng)建圖像
createImageData(寬度印机,高度)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末著蛙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子耳贬,更是在濱河造成了極大的恐慌踏堡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咒劲,死亡現(xiàn)場(chǎng)離奇詭異顷蟆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)腐魂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門帐偎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蛔屹,你說我怎么就攤上這事削樊。” “怎么了兔毒?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵漫贞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我育叁,道長(zhǎng)迅脐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任豪嗽,我火速辦了婚禮谴蔑,結(jié)果婚禮上豌骏,老公的妹妹穿的比我還像新娘。我一直安慰自己隐锭,他們只是感情好窃躲,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钦睡,像睡著了一般框舔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赎婚,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天刘绣,我揣著相機(jī)與錄音,去河邊找鬼挣输。 笑死纬凤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撩嚼。 我是一名探鬼主播停士,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼完丽!你這毒婦竟也來(lái)了恋技?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逻族,失蹤者是張志新(化名)和其女友劉穎蜻底,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聘鳞,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡薄辅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抠璃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片站楚。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖搏嗡,靈堂內(nèi)的尸體忽然破棺而出窿春,到底是詐尸還是另有隱情,我是刑警寧澤采盒,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布旧乞,位于F島的核電站,受9級(jí)特大地震影響纽甘,放射性物質(zhì)發(fā)生泄漏良蛮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一悍赢、第九天 我趴在偏房一處隱蔽的房頂上張望决瞳。 院中可真熱鬧,春花似錦左权、人聲如沸皮胡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)屡贺。三九已至,卻和暖如春锌杀,著一層夾襖步出監(jiān)牢的瞬間甩栈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工糕再, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留量没,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓突想,卻偏偏與公主長(zhǎng)得像殴蹄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猾担,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 首先我們來(lái)了解以下canvas標(biāo)簽: canvas是HTML5新增的標(biāo)簽袭灯,用于在網(wǎng)頁(yè)上實(shí)時(shí)生成圖像。 canvas...
    SkyNet_Z閱讀 852評(píng)論 2 0
  • 前言 微信小游戲推出后一度爆火绑嘹,一個(gè)簡(jiǎn)單的跳一跳讓大家玩的不亦樂乎稽荧,那么很多人就在想自己嘗試學(xué)學(xué)微信小游戲,開發(fā)一...
    大公爵閱讀 2,770評(píng)論 0 11
  • Canvas API:可以動(dòng)態(tài)生成和展示圖形工腋、圖表蛤克、圖像以及動(dòng)畫。不需要將所繪制圖像中的每個(gè)圖元當(dāng)作對(duì)象存儲(chǔ)夷蚊,因此...
    linda102閱讀 1,286評(píng)論 0 0
  • 變形 在了解變形之前构挤,先了解狀態(tài)。 狀態(tài) canvas 的狀態(tài)就是當(dāng)前畫面應(yīng)用的所有樣式和變形的一個(gè)快照惕鼓,用來(lái)操作...
    Sachie閱讀 532評(píng)論 0 0
  • 八筋现、Canvas 文本 context 對(duì)象的文本繪制功能由這兩個(gè)函數(shù)組成:fillText(text, x,y,...
    linda102閱讀 381評(píng)論 0 0