亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

html5 Canvas畫圖教程(4)―未閉合的路徑及漸變色的填充方法

2024-08-26 00:15:02
字體:
來源:轉載
供稿:網友
一般繪圖的方式有兩種,即填充和描邊,前面的文章已經講了描邊的方法stroke,本文就講一下Canvas中填充圖形的方法。
填充即fill(),很直白吧?而且和strokeStyle表示描邊樣式一樣,fillStyle即表示填充樣式。
ctx.fillStyle = '顏色';默認的填充樣式是不透明的黑色

提問:未閉合的路徑可以填充嗎?
可以。Canvas會從你當前路徑的終點直接連接到起點,然后填充。如圖:


但你可以發現,最后一段沒有描邊。
記得我們前一篇文章用4條線畫了一個正方形,但canvas不會這么差勁,連直接繪制矩形的函數都沒有。你可以使用fillRect()直接填充一個矩形:

復制代碼 代碼如下:www.CuoXIn.com

ctx.fillRect(x,y,width,height);

這里的x,y是指矩形的左上角起點的坐標,記住。
說到fillRect,就不得不提strokeRect,你猜對了,他的意思就是直接描邊出一個矩形。
還有fillText與strokeText,至于作用嘛,你可能都猜到了,我這里先不講,大家先預習吧。

Canvas填充漸變色
在Canvas中,漸變色同樣分為兩種,即線性漸變和徑向漸變,而且創建他們的方法也是獨立的。我們先看如何創建線性漸變。
創建線性漸變=createLinearGradient——看,依然很直接的單詞。他的語法如下:
createLinearGradient(x1,y1,x2,y2)有4個參數呢!看起來好復雜,其實這個挺簡單的,因為我們前面已經說了,平面世界里的一個點是由x坐標和y坐標確定的。所以,x1,y1就是表示線性漸變的起點坐標,x2,y2就表示終點坐標。
這樣做的好處很明顯,如果我們想創建一個斜著的線性漸變,很方便。但我們先創建一個水平的線性漸變試試吧。
var linear = ctx.createLinearGradient(100,100,200,100);漸變好像創建了,那么我們可以填充了嗎?————這個漸變是空的,沒有顏色。
往漸變條里加顏色的方法是addColorStop(位置,顏色).但要注意了,這個addColorStop不是加在畫筆上,而是加在前面的那個保存漸變的變量上,我這里是linear.

復制代碼 代碼如下:www.CuoXIn.com

var linear = ctx.createLinearGradient(100,100,200,100);
linear.addColorStop(0,'#fff');
linear.addColorStop(0.5,'#f0f');
linear.addColorStop(1,'#333');

我這里用了3個addColorStop,即為漸變條加上了3個顏色。
注意:addColorStop的位置參數,永遠是介于0-1之間的數字,可以是兩位小數,表示百分比。他沒法接收’3px’這樣的參數。
這時候,我們就可以填充漸變色了,但我們必須先把定義好的漸變賦給fillStyle.

復制代碼 代碼如下:www.CuoXIn.com

var linear = ctx.createLinearGradient(100,100,200,100);
linear.addColorStop(0,'#fff');
linear.addColorStop(0.5,'#f0f');
linear.addColorStop(1,'#333');
ctx.fillStyle = linear; //把漸變賦給填充樣式
ctx.fillRect(100,100,100,100);
ctx.stroke();


注意,fillRect與strokeRect畫出的都是獨立的路徑,如上面的代碼,在fillRect后調用描邊,并不會把剛剛畫出的矩形描邊,strokeRect同理。
經過測試后,發現了一個很蛋疼的問題,就是線性漸變的坐標是相對于整個Canvas范圍而言的。比如我這里,我的線性漸變起點就是100,100,如果我畫了一個矩形在0,0的位置,用這個漸變來填充,就會發現沒有填充——因為我的漸變的范圍根本就超過了矩形的范圍。
這真是一個坑爹的設定。

提問:漸變起點之前與漸變終點之后還會填充顏色嗎?
會。起點之前的顏色就是起點色,終點之后的顏色一直是終點色。
如何終止終點色,你可以在結束色之后再填一個透明的結束色。如:

復制代碼 代碼如下:www.CuoXIn.com

linear.addColorStop(0.99,'#333');
linear.addColorStop(1,'rgba(51,51,51,0)');

依照前面的計劃,我再建一個傾斜的線性漸變試試。只需要改createLinearGradient的參數即可.

復制代碼 代碼如下:www.CuoXIn.com

var linear = ctx.createLinearGradient(100,100,200,200);

效果如圖:

然后,讓我們來試試徑向漸變(圓形漸變)。與createLinearGradient類似,創建徑向漸變的方法是:createRadialGradient,但他們的參數可大不相同:
createRadialGradient(x1,y1,r1,x2,y2,r2)其中的x1,y1,x2,y2依舊表示起點和終點,不過這里的起點和終點都是一個圓,而x,y則是圓心的坐標。所以,r1與r2分別是起點圓的半徑和終點圓的半徑。如圖:


在我的印象中,貌似徑向漸變就是一個圓,圓心就是起點,圓的半徑就是終點。但canvas里面的徑向漸變竟然搞的不一樣了,起點一個圓,終點一個圓,和我的理解有差距。
我們從最簡單的做起。首先,做一個很正規的徑向漸變,即漸變圓形的圓心就是漸變的起點。由于正規的徑向漸變,中心即圓心,所以我們應該盡量避免發生偏斜。那么,我們把終點圓的圓心與起點圓的圓心重合吧?

復制代碼 代碼如下:www.CuoXIn.com

var radial = ctx.createRadialGradient(55,55,10,55,55,55); //重合的圓心坐標
radial.addColorStop(0,'#fff');
radial.addColorStop(0.5,'#ff0');
radial.addColorStop(0.9,'#555');
radial.addColorStop(1,'#f00');


這里我設置的徑向漸變起點圓和終點圓的圓心坐標相同,而起點圓半徑為10,終點圓半徑為55.最后畫出的徑向漸變范圍是一個寬高110的圓形,說明漸變范圍以終點圓的范圍為準。
(可以看到終點圓范圍之外還是有顏色,這個顏色就是終點色,但是,如果你企圖使用radial.addColorStop(1.5,’#0f0′);這樣來定義漸變范圍之外的顏色,你還是會收到一個錯誤).
那么,起點圓的半徑有什么用呢?——本來正常的徑向漸變的中心(姑且稱之為“變心”…吧)只是一個點,不應該是一個圓的。其實我們沒錯,這個起點圓就相當于一個圓點而已,只是可能比較大。
讓我們把起點圓的半徑變得很大,接近于終點圓的半徑:

復制代碼 代碼如下:www.CuoXIn.com

var radial = ctx.createRadialGradient(55,55,50,55,55,55); //很接近

其他的colorStop都不變,然后圖形就變成了這個樣子。


也就是說,canvas中徑向漸變的起點色,是從起點圓的范圍之外繪制的,而起點圓的整個顏色都是起點色。
我們把起點圓的半徑設為0,那徑向漸變的“變心”,就真的是一個點了。
大部分時候我們都不需要很正規的徑向漸變,反而希望他的變心是偏移的,類似下圖:

這個時候,canvas徑向漸變兩個圓的優勢就出來了,只要我們起點圓與終點圓的圓心不重合,那變心也就會偏移:
var radial = ctx.createRadialGradient(75,75,0,55,55,55);但此時的漸變范圍依然是終點圓的范圍哈。
很多人天生就有一種搞破壞的心理,比如這里,終點圓的半徑總比起點圓大,但如果把他們反過來會怎么樣呢?

復制代碼 代碼如下:www.CuoXIn.com

var radial = ctx.createRadialGradient(75,75,55,55,55,0);

經測試,這樣不會報錯,只是原來的從內到外的漸變反過來變成了從外到內的漸變了。這是個好用法。


還有個問題,如果我們把起點圓的圓心偏移了,并且起點圓的范圍超出了終點圓的范圍,

這時會發生什么?


啊?。窟@是什么情況?!
當起點圓和終點圓只有部分重疊的時候,就會出現這種情況。所以,如果你需要正常的徑向漸變,請保證其中一個圓完全包住了另一個圓。
另外,既然漸變可以賦給fillStyle,那么也可以賦給strokeStyle。效果你懂的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品一区二区三区在线| 91久久嫩草影院一区二区| 久久久久久18| 亚洲激情国产精品| 国产女同一区二区| 国产玖玖精品视频| 久久久久99精品久久久久| 国产精品美女999| 日韩在线一区二区三区免费视频| www.日韩av.com| 久久精品久久精品亚洲人| 91成人国产在线观看| 日韩亚洲在线观看| 精品久久久久久中文字幕大豆网| 国产情人节一区| 亚洲美女激情视频| 国产丝袜一区二区| 亚洲成人a**站| 国产亚洲xxx| 亚洲精品资源美女情侣酒店| 精品香蕉一区二区三区| 在线午夜精品自拍| 国语自产精品视频在免费| 51色欧美片视频在线观看| 国产欧美一区二区三区在线看| 国产精品高潮呻吟久久av无限| 欧美刺激性大交免费视频| 欧洲美女免费图片一区| 2019中文字幕在线免费观看| 久久777国产线看观看精品| 国产欧美精品xxxx另类| 久久久久久久激情视频| 91国语精品自产拍在线观看性色| 色噜噜久久综合伊人一本| 久久手机免费视频| 日韩电影第一页| 日韩精品中文字幕视频在线| 国产一区二区三区中文| 欧美激情在线一区| 国产精品久久久久久影视| 欧美电影免费在线观看| 九九热视频这里只有精品| 日韩电影免费观看在线观看| 国产精品爱啪在线线免费观看| 另类视频在线观看| 日韩hd视频在线观看| 国产一区二区三区在线观看网站| 亚洲美女av在线| 中文字幕欧美日韩va免费视频| 国产大片精品免费永久看nba| 69av在线播放| 欧美日韩免费在线观看| 欧美一级在线亚洲天堂| 国内自拍欧美激情| 国产欧美一区二区白浆黑人| 亚洲第一视频网| 国内精品久久久久伊人av| 欧美一级在线播放| 国产精品视频久久久久| 久久精品国产免费观看| 97婷婷涩涩精品一区| 社区色欧美激情 | 欧美自拍视频在线| 欧美日韩国产激情| 国产丝袜一区二区| 91色精品视频在线| 国产精品日韩精品| 亚洲另类欧美自拍| 欧美成人免费观看| 欧美性生活大片免费观看网址| 狠狠躁夜夜躁人人爽天天天天97| 亚洲美女自拍视频| 综合欧美国产视频二区| 成人淫片在线看| 国产精品丝袜久久久久久不卡| 精品国产1区2区| 最近日韩中文字幕中文| 亚洲色图25p| 国产精品电影在线观看| 色中色综合影院手机版在线观看| 国产精品一香蕉国产线看观看| 日韩欧美国产成人| 国产精品美女久久久免费| 亚洲一区二区三区视频播放| 国产精品久久在线观看| 中文字幕av一区| 国自产精品手机在线观看视频| 国产精品久久久久久久久久尿| 日韩视频免费在线| 情事1991在线| 亚洲欧美日韩精品久久亚洲区| 国产精品一区二区久久久久| 日韩国产精品视频| 日本国产一区二区三区| 国产精品亚洲综合天堂夜夜| 欧美亚洲在线视频| 国产欧美精品一区二区三区介绍| 久久久999精品视频| 亚洲综合在线中文字幕| 国产欧美精品日韩精品| 国产精品人成电影| 亚洲国产成人精品一区二区| 欧美巨大黑人极品精男| 成人欧美在线视频| 日本精品免费一区二区三区| 日韩中文字幕视频在线观看| 亚洲精品一区二三区不卡| 第一福利永久视频精品| 88国产精品欧美一区二区三区| 欧美日韩中文字幕在线| 亚洲欧美在线磁力| 久久理论片午夜琪琪电影网| 国产精品高清在线| 草民午夜欧美限制a级福利片| 欧美日韩亚洲国产一区| 国产精品国产亚洲伊人久久| 国产综合久久久久久| 久久精品视频99| 91精品国产综合久久久久久蜜臀| 亚洲一区二区三区四区视频| 国产99久久精品一区二区永久免费| 久久久精品一区二区| 日本不卡视频在线播放| 午夜精品久久久99热福利| 日韩国产欧美精品一区二区三区| 国产精品扒开腿做爽爽爽的视频| 国产精品亚洲аv天堂网| 理论片在线不卡免费观看| 国产精品欧美日韩| 欧美国产在线电影| 中文字幕日韩视频| 国产精品免费小视频| 欧美性猛交xxxx富婆弯腰| 国产精品亚洲一区二区三区| 亚洲男人天堂网| 成人女保姆的销魂服务| 国产欧美一区二区三区在线看| 色悠悠久久88| 亚洲自拍欧美色图| 欧美在线观看一区二区三区| 亚洲欧洲在线播放| 久久国产加勒比精品无码| 亚洲国产欧美在线成人app| 97视频免费看| 欧美激情精品久久久久久变态| 清纯唯美日韩制服另类| 色多多国产成人永久免费网站| 午夜精品免费视频| 亚洲a区在线视频| 中国日韩欧美久久久久久久久| 日韩亚洲欧美中文在线| 不卡av电影院| xxx成人少妇69| 亚洲最大成人免费视频| 中文字幕国产精品| 91精品国产高清自在线看超| 国产成人拍精品视频午夜网站| 久久久综合免费视频| 亚洲一区二区三区xxx视频| 少妇高潮 亚洲精品| 久久噜噜噜精品国产亚洲综合| 欧美日韩国产精品一区二区不卡中文| 96精品久久久久中文字幕| 亚洲香蕉av在线一区二区三区|