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

首頁 > 網站 > WEB開發 > 正文

js高級程序設計筆記10--canvas繪圖

2024-04-27 15:16:54
字體:
來源:轉載
供稿:網友

要使用元素,必須先設置width和height屬性,指定可以繪圖的區域大小。

<canvas id=‘drawing" width="200" height="200">a drawing of something</canvas>

要在canvas上畫圖,要取得繪圖上下文:getContext(上下文的名字)。傳入“2d”則獲得2D上下文。

var drawing = document.getElementById("drawing");//確認瀏覽器支持canvas元素if(drawing.getContext){ var context = drwaing.getContext("2d");}

使用toDataURL()方法可以導出元素上繪制的圖像。接受一個參數:圖像的MIME類型格式。取得畫布中一幅PNG格式的圖像。

var imgURI = drawing.toDataURL("image/png");var image = document.createElement("img");image.src = imgURI;document.body.appendChild(image);

2D上下文

2D上下文的坐標始于元素的左上角,原點坐標是(0,0)。

填充和描邊

兩個屬性:fillStyle和strokeStyle。這兩個屬性的值可以是字符串,漸變對象或模式對象,他們的默認值都是“#000000”。如果是顏色可以使用CSS中顏色值的任何格式。

var context = drawing.getContext("2d");context.strokeStyle = "red";context.fillStyle = "#0000ff";

繪制矩形

fillRect():填充矩形,填充的顏色由fillStyle屬性指定。 strokeRect():繪制的矩形用指定的顏色描邊。顏色由strokeStyle屬性指定.描邊線條的寬度由lineWidth屬性控制,可以是任意整數。lineCap屬性可以控制線條末端的形狀是平頭,圓頭,還是方頭。(“butt”,”round”,”square”),lineJoin屬性可以控制線條相交的方式是圓交,斜交,斜接(“round”,”bevel”,”miter”) clearRect():清楚畫布上的矩形區域。

這三個方法都接受4個參數:矩形的x坐標,矩形的y坐標,矩形寬度和高度。單位都是像素。

var context = drawing.getContext("2d"); //繪制紅色矩形 context.fillStyle = "#ff0000"; context.fillRect(10,10,50,50); //繪制半透明的藍色矩形 context.fillStyle = "rgba(0,0,255,0.5)"; context.fillRect(30,30,50,50); context.clearRect(40,40,10,10); context.strokeStyle = "#ff0000"; context.strokeRect(20,20,50,50); context.strokeStyle = "rgba(0,0,255,0.5)"; context.strokeRect(40,40,50,50);

繪制路徑

要繪制路徑,首先調用beginPath()方法,然后再調用下列方法繪制路徑:

arc(x,y,radius,startAngle,endAngle,counterclockwise):以(x,y)為圓心繪制一條弧線,半徑為radius,起始和結束角度,是否按逆時針方向計算角度。 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):將繪圖游標移動到(x,y),不劃線。 quadraticCruveTo(cx,cy,x,y):從上一點繪制一條二次曲線,到(x,y)為止,以(cx,cy)為控制點。 rect(x,y,width,height):從點(x,y)繪制一個矩形。

創建路徑后,可調用以下方法: 1. closePath():繪制一條連接到路徑起點的線條。 2. fill():填充 3. stroke():描邊 4. clip():在路徑上創建一個剪切區域。 繪制一個時鐘

context.beginPath(); //繪制外圓 context.arc(100,100,99,0,2*Math.PI,false); //內圓 context.moveTo(194,100); context.arc(100,100,94,0,2*Math.PI,false); //分針 context.moveTo(100,100); context.lineTo(100,15); //時針 context.moveTo(100,100); context.lineTo(35,100); context.stroke();

isPointInPath(x,y):確定(x,y)在不在路徑上。

繪制文本

fillText(): strokeText(): 這兩個方法都接受4個參數:要繪制的文本字符串,x坐標,y坐標和可選的最大像素高度。而且這兩個方法都以3個屬性為基礎: font:表示文本樣式,大小及字體。 textAlign:文本對齊方式??扇〉闹担簊tart,end,left,right,center.建議使用start和end。因為這兩個能同時適合從左到右和從右到左顯示的語言。 textBaseline:文本的基線。可取的值:top,hanging,middle,alphabetic,ideographic,bottom. 這幾個屬性都有默認值。

context.font = "bold 14px Arial";context.textAlign = "center";context.textBaseline = "middle";context.fillText("12",100,20);

變換

rotate(angle):圍繞原點旋轉圖像angle弧度。 scale(scaleX,scaleY):縮放圖像,在x方向上乘以scaleX,在Y方向上乘以scaleY. translate(x,y):將坐標原點移動到(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):將變換矩陣重置為默認狀態,然后再調用transform().

還有兩個方法需要注意(可以多次調用): save():對繪圖上下文的設置進行保存。以便將來會用到。(保存在一個棧結構中) restore():一級級恢復上下文的設置。即context回到save()之前的狀態。

繪制圖像

drawImage():把一幅圖像繪制到畫布上。 三種不同的調用方式: 傳入一個元素,繪制圖像起點的x,y坐標。

var image = document.images[0];context.drawImage(image,10,10);

還可以再傳兩個參數:目標寬度,目標高度。以此來縮放圖像。

context.drawImage(image,10,10,20,30);

第三種調用方式傳入9個參數:要繪制的圖像,源圖像的x坐標,源圖像的y坐標,源圖像的寬度,源圖像的高度,目標圖像的x坐標,目標圖像的y坐標,目標圖像的寬度,目標圖像的高度。

注:除了給drawImage()方法傳入元素外,還可以傳入另一個元素作為其第一個參數。這樣就可以把另一個畫布內容繪制到當前畫布上。

陰影

2D上下文會根據以下幾個屬性自動為形狀或路徑繪制出陰影: shadowColor:用Css顏色格式表示的陰影顏色,默認為黑色。 shadowOffsetX:形狀或路徑x軸的陰影偏移量,默認為0. shadowOffsetY:形狀或路徑ya軸的陰影偏移量,默認為0. shadowBlur:模糊的像素數,默認為0,及不模糊。

var context = drawing.getContext("2d"); context.shadowOffsetX = 5; context.shadowOffsetY = 5; context.shadowBlur = 4; context.shadowColor = "rgba(0, 0, 0, 0.5)"; context.fillStyle = "#ff0000"; context.fillRect(10, 10, 50, 50);

漸變

漸變由CanvasGradient實例表示。通過2D上下文來創建和修改: createLinearGradient():創建一個新的線性漸變。4個參數:起點的x,y坐標,終點的x,y坐標。返回CanvasGradient實例。 創建完后,使用addColorStop():指定色標。兩個參數:色標位置(0-1)和CSS顏色值。

var context = drawing.getContext("2d"),gradient = context.createLinearGradient(30, 30, 70, 70); gradient.addColorStop(0, "white");gradient.addColorStop(1, "black");context.fillStyle = gradient;context.fillRect(30, 30, 50, 50);

也可以創建徑向漸變:createRadialGradient():6個參數:對應著兩個圓的圓心和半徑。前三個是起點圓的圓心和半徑,后三個是終點圓的。

gradient = context.createRadialGradient(55, 55, 10, 55, 55, 30);

模式

其實就是重復的圖像,可以用來填充或描邊圖形。 createPattern():2個參數,一個元素和一個表示如何重復圖像的字符串,(repeat,repate-x,repeat-y,no-repeat)

var context = drawing.getContext("2d"),image = document.images[0],pattern = context.createPattern(image, "repeat");context.fillStyle = pattern;context.fillRect(10, 10, 150, 150);

createPattern()的第一個參數可以是元素或另一個元素。

使用圖像數據

getImageData():取得原始圖像數據。4個參數,要取得其數據的畫面區域的x,y坐標以及該區域的像素寬度和高度。 返回一個ImageData的實例。每個ImageData對象有三個屬性。width,height和data(一個數組,保存著圖像中每個像素的數據,每個像素用4個元素保存,紅,綠,藍,透明度)

var imageData = context.getImageData(10,5,50,50);var data = imageData.data,red = data[0],green = data[1],blue = data[2],alpha = data[3];

putImageData(ImageData,x,y):方法把圖像數據繪制到畫布上。

合成

globalAlpah:介于0-1的值,用于指定所有繪制的透明度。 globalCompositionOperation:表示后繪制的圖形怎樣與先繪制的圖形結合??赡艿闹等缦拢? source-over(默認值):后繪制的圖形位于先繪制圖形的上方。 source-in:兩者重疊的部分可見,其他部分完全透明。 source-out:后繪制的圖形與先繪制的圖形不重疊的部分可見,先繪制的圖形完全透明。 source-atop:后繪制的圖形與先繪制的圖形重疊的部分可見,先繪制的圖形不受影響。 destination-over:后繪制的圖形位于先繪制圖形的下方,只有之前透明像素下的部分才可見。 destination-in:后繪制的圖形位于先繪制圖形的下方,兩者不重疊的部分完全透明。 destination-out:后繪制的圖形擦除與先繪制圖形重疊的部分。 destination-atop:后繪制的圖形位于先繪制圖形的下方,在兩者不重疊的地方,先繪制的圖形變透明。 lighter:后繪制的圖形與先繪制的圖形重疊部分的值相加,使該部分變亮。 copy:后繪制的圖形完全取代與之重疊的先繪制圖形。 xor:后繪制的圖形與先繪制的圖形重疊部分執行“異或”操作。

WebGL

針對Canvas的3D上下文

類型化數組

webGL涉及的復雜計算需要提前知道數值的精度,而js數值無法滿足需要。因此webGL引進了類型化數組。(其元素被設置為特性類型的值) ArrayBuffer:該對象表示的是內存中指定的字節數。但不會指定這些字節用于保存什么類型的數據。

var buffer = new ArrayBuffer(20);var bytes = buffer.byteLength;//20

后續補上


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91免费看国产| 在线免费看av不卡| 91亚洲精品在线| 国产精品第七十二页| 中文字幕日韩在线视频| 国产精品久久久91| 狠狠躁天天躁日日躁欧美| 欧美激情在线播放| 国产91精品黑色丝袜高跟鞋| 538国产精品一区二区免费视频| 国产欧美日韩丝袜精品一区| 亚洲色图17p| 国产精品视频在线播放| 国产日韩精品视频| 亚洲第一区第二区| 夜夜嗨av色一区二区不卡| 亚洲午夜未满十八勿入免费观看全集| 色综久久综合桃花网| 亚洲国产古装精品网站| 国产精品第二页| 亚洲国产精品yw在线观看| 国产日韩av在线播放| 91精品国产91久久久久| 国产精品视频久久| 国产999精品久久久| 91国偷自产一区二区三区的观看方式| 一本一本久久a久久精品牛牛影视| 日韩在线一区二区三区免费视频| 日本午夜人人精品| 精品日本美女福利在线观看| 国产精品人成电影在线观看| 91性高湖久久久久久久久_久久99| 91九色综合久久| 久久久亚洲天堂| 国产精品福利在线观看网址| 亚洲国产美女精品久久久久∴| 国产精品一久久香蕉国产线看观看| 另类专区欧美制服同性| 亚洲精品av在线播放| 日本精品视频在线观看| 97碰碰碰免费色视频| 亚洲精品美女久久久| 欧美一级黑人aaaaaaa做受| 成人a级免费视频| 国产精品白嫩初高中害羞小美女| 亚洲成人激情图| 在线视频欧美日韩精品| 欧美日本高清视频| 欧美黄色片视频| 在线不卡国产精品| 国产亚洲精品va在线观看| 国产亚洲xxx| 色狠狠av一区二区三区香蕉蜜桃| 精品国内产的精品视频在线观看| xvideos国产精品| 久久国产精品久久久| 欧美日韩国产激情| 欧美国产精品日韩| 国产精品免费看久久久香蕉| 久久99热精品这里久久精品| 亚洲色图综合网| 亚洲黄色有码视频| 欧美性视频在线| 91精品中国老女人| 国产精品日日做人人爱| 国产成人拍精品视频午夜网站| 亚洲电影免费在线观看| 日本欧美一二三区| 91精品视频在线免费观看| 欧美老女人www| 日韩在线中文字| 两个人的视频www国产精品| 国内外成人免费激情在线视频| 亚洲免费人成在线视频观看| 成人综合网网址| 亚洲精品美女视频| 亚洲国产日韩精品在线| 日本久久久久久久久久久| 色偷偷88888欧美精品久久久| 欧美成人午夜视频| 热久久美女精品天天吊色| 国产精品毛片a∨一区二区三区|国| 亚洲欧美日韩第一区| 97热精品视频官网| 欧美午夜精品在线| 久久五月情影视| 欧美裸体xxxx极品少妇软件| 一区二区亚洲精品国产| 国产成人精品av在线| 久久全球大尺度高清视频| 日韩av网址在线| 欧美日韩国产精品| 日产精品久久久一区二区福利| 日韩国产在线看| 亚洲免费成人av电影| 亚洲精品美女视频| 国产一区二区久久精品| 久久久伊人日本| 精品自在线视频| 国产精品96久久久久久| 疯狂蹂躏欧美一区二区精品| 欧美放荡办公室videos4k| 欧美日韩国产色| 欧美亚洲激情视频| 久久夜色精品亚洲噜噜国产mv| 国产精品久久久久久久久久久久久| 久久亚洲国产精品成人av秋霞| 国产成人精品视频在线| 亚洲xxx大片| 亚洲精品国产综合区久久久久久久| 久久人人爽人人爽人人片av高请| 亚洲精品国产综合区久久久久久久| 成人久久久久爱| 亚洲精品国产综合区久久久久久久| 日本韩国欧美精品大片卡二| 91精品国产自产在线观看永久| 中文字幕亚洲综合久久筱田步美| 国产精品pans私拍| 色老头一区二区三区在线观看| 亚洲国产精品系列| 亚洲人成网7777777国产| 中文字幕亚洲综合久久筱田步美| 国产欧美精品一区二区| 久久电影一区二区| 亚洲欧美日韩视频一区| 91av福利视频| 最新日韩中文字幕| 国产精品白丝jk喷水视频一区| 精品香蕉在线观看视频一| 亚洲最大中文字幕| 欧美精品日韩www.p站| 国产精品久久精品| 亚洲偷熟乱区亚洲香蕉av| 欧美精品午夜视频| 在线视频欧美性高潮| …久久精品99久久香蕉国产| 亚洲第一福利在线观看| 国产99视频在线观看| 亚洲福利视频免费观看| 亚洲成人精品在线| 欧美韩日一区二区| 亚洲另类图片色| 久久久久国产精品一区| 性欧美xxxx视频在线观看| 亚洲xxxx做受欧美| 亚洲一区二区三区在线免费观看| 亚洲电影免费观看高清| 一区二区亚洲精品国产| 国产精品久久久久久久一区探花| 国产亚洲欧美日韩一区二区| 精品国产一区二区三区四区在线观看| 日韩精品www| 国产女精品视频网站免费| 亚洲人成网站色ww在线| 亚洲日本中文字幕| 国产一区二区美女视频| 精品国内自产拍在线观看| 久久久免费高清电视剧观看| 精品久久久久久久久久久久久久| 国产精品亚洲美女av网站| 久久久久999| 久久久99久久精品女同性| 国产成人精品久久亚洲高清不卡| 日韩a**站在线观看|