久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

HTML5新標(biāo)簽之Canvas詳細介紹


1、概述

Canvas 用于在網(wǎng)頁展示圖像,并且可以定制內(nèi)容,基本上它是一個可以用JavaScript操作的位圖(bitmap)。

Canvas API用于網(wǎng)頁實時生成圖像,JavaScript通過API來操作圖像內(nèi)容。這樣做的優(yōu)點是:減少HTTP請求數(shù),減少下載的數(shù)據(jù),加快網(wǎng)頁載入時間,可以對圖像進行實時處理。

使用前,首先需要建一個Canvas網(wǎng)頁元素。

<canvas id="myCanvas" width="400" height="200">      您的瀏覽器不支持canvas!  </canvas>

如果瀏覽器不支持canvas,則就會顯示canvas標(biāo)簽中間的文字——“您的瀏覽器不支持canvas!”。

然后,使用JavaScript獲取canvas的DOM對象。

var canvas = document.getElementById('myCanvas');

接著,檢查瀏覽器是否支持Canvas API,方法是看有沒有部署getContext方法。

if (canvas.getContext) {    //some code here}

使用getContext('2d')方法,初始化平面圖像的上下文環(huán)境。

var ctx = canvas.getContext('2d');

現(xiàn)在就在canvas中間生成平面圖像了。

2、繪圖方法

(1)填充顏色

設(shè)置填充顏色。

ctx.fillStyle = "#000000";//設(shè)置填充色為黑色ctx.strokeStyle = "#FF6600"; //設(shè)置筆觸顏色

(2)繪制矩形

繪制實心矩形。

ctx.fillStyle = "#000000";//填充顏色,即矩形顏色ctx.fillRect(x, y, width, height);

繪制空心矩形。

ctx.strokeStyle = "#FF6600"; //筆觸顏色,即矩形邊框顏色ctx.strokeRect(x, y, width, height);

清除某個矩形區(qū)域的內(nèi)容。

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

(3)繪制路徑

ctx.beginPath(); //開始路徑繪制  ctx.moveTo(20, 20); //設(shè)置路徑起點  ctx.lineTo(200, 20); //繪制一條到200, 20的直線  ctx.lineWidth = 1.0; //設(shè)置線寬  ctx.strokeStyle = "#CC0000"; //設(shè)置線的顏色  ctx.stroke(); //進行線的著色,這時整條線才變得可見

(4)繪制圓形和扇形

繪制扇形的方法。

ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise);

arc方法的x和y參數(shù)是圓心坐標(biāo),radius是半徑,startAngle和endAngle則是扇形的起始角度和終止角度(以狐度表示),anticlockwise表示作圖是應(yīng)該逆時針畫(true)還是順時針畫(false)。

繪制實心的圓形。

ctx.beginPath();    ctx.arc(60, 60, 50, 0, Math.PI*2, true);    ctx.fillStyle = "#000000";    ctx.fill();

繪制空心圓形。

ctx.beginPath();    ctx.arc(60, 60, 50, 0, Math.PI*2, true);    ctx.lineWidth = 1.0;    ctx.strokeStyle = "#000";    ctx.stroke();

(5)繪制文本

fillText方法用于添加文本,strokeText方法用于添加空心字。使用之前,需設(shè)定字體、對文方向、顏色等屬性。

ctx.font = "Bold 20px Arial"; //設(shè)置字體  ctx.textAlign = "left"; //設(shè)置對齊方式  ctx.fillStyle = "#008600"; //設(shè)置填充顏色  ctx.fillText("Hello!", 10, 50); //設(shè)置字體內(nèi)容,以及在畫布上的位置  ctx.strokeText("Hello!", 10, 100); //繪制空心字

fillText方法不支持文本斷行,即所有文本出現(xiàn)在一行內(nèi)。所以如果要生成多行文本,只有調(diào)用多次fillText方法。

2.1 漸變

設(shè)置漸變顏色。

var myGradient = ctx.createLinearGradient(0, 0, 0, 160);    myGradient.addColorStop(0, "#BABABA");    myGradient.addColorStop(1, "#636363");

createLinearGradient方法的參考是(x1, y1, x2, y2),其中x1和y1是起點坐標(biāo),x2和y2是終點坐標(biāo)。通過不同的坐標(biāo)值,可以生成從上至下、從左至右的漸變等等。

addColorStop方法的參數(shù)是(offset, color),其中offset是一個范圍在0.0到1.0之間的浮點值,表示漸變的開始點和結(jié)束點之間的一部分,offset為0對應(yīng)開始點,offset為1對應(yīng)結(jié)束點,color為CSS顏色值的字符串表示。

使用方法如下:

ctx.fillStyle = myGradient;    ctx.fillRect(10, 10, 200, 100);

2.2 陰影

ctx.shadowOffsetX = 10; //設(shè)置水平位移  ctx.shadowOffsetY = 10; //設(shè)置垂直位移  ctx.shadowBlur = 5; //設(shè)置模糊度  ctx.shadowColor = "rgba(0, 0, 0, 0.5)"; //設(shè)置陰影顏色  ctx.fillStyle = "#CC0000";    ctx.fillRect(10, 10, 200, 100);

3、圖像處理方法

3.1 插入圖像

canvas允許將圖像文件插入畫布,做法是讀取圖片后,使用drawImage方法在畫布內(nèi)進行重繪。

var img = new Image();    img.src = "image.png";    ctx.drawImage(img, 0, 0); //設(shè)置對應(yīng)的圖像對象,以及它在畫布上的位置

由于圖像的載入需要時間,drawImage方法只能在圖像完全載入后才能調(diào)用,因此上面的代碼需要改寫。

var image = new Image();    image.onload = function() {    if (image.width != canvas.width) {          canvas.width = image.width;      }    if (image.height != canvas.height) {          canvas.height = image.height;      }        ctx.clearRect(0, 0, canvas.width, canvas.height);        ctx.drawImage(image, 0, 0);    }    image.src = "image.png";

drawImage()方法接受三個參數(shù),第一個參數(shù)是圖像文件的DOM元素(即img標(biāo)簽),第二個和第三個參數(shù)是圖像左上角在canvas元素中的坐標(biāo),上例中的(0, 0)就表示將圖像左上角放置在canvas元素左上角。

3.2 讀取Canvas的內(nèi)容

getImageData 方法可以用來讀取Canvas的內(nèi)容,返回一個對象,包含了每個像素的信息。

var imageData = context.getImageData(0, 0, canvas.width, canvas.height);

imageData對象有一個data屬性,它的值是一個一維數(shù)組。該數(shù)組的值,依次是每個像素的紅、綠、藍、alpha通道值,因此該數(shù)組的長度等于圖像的像素寬度 * 圖像的像素高度 * 4,每個值的范圍是 0~255。這個數(shù)組不僅可讀,而且可寫,因此通過操作這個數(shù)組的值,就可以達到操作圖像的目地。修改這個數(shù)組后,使用putImageData方法將數(shù)組內(nèi)容重新寫回Canvas。

context.putImageData(imageData, 0, 0);

3.3 像素處理

假定filter是一個處理像素的函數(shù),那么整個對Canvas的處理流程,可以用下面的代碼表示。

if (canvas.width > 0 && canvas.height > 0) {      var imageData = context.getImageData(0, 0, canvas.width, canvas.height);        filter(imageData);        context.putImageData(imageData, 0, 0);    }

以下是幾種常見的處理方法。

(1)灰度效果

灰度圖(grayscale)就是取紅、綠、藍三個像素值的算術(shù)平均值,這實際上將圖像轉(zhuǎn)成了黑白形式。假定d[i]是像素數(shù)組中一個像素的紅色值,則d[i+1]為綠色值,d[i+2]為藍色值,d[i+3]就是alpha通道值。轉(zhuǎn)成灰度的算法,就是將紅、綠、藍三個值相加后除以3,再將結(jié)果寫回數(shù)組。

grayscale = function(pixels) {      var d = pixels.data;      for (var i = 0; i < d.length; i += 4) {          var r = d[i];          var g = d[i + 1];          var b = d[i + 2];          d[i] = d[i + 1] = d[i + 2] = (r + g + b) / 3;      }    return pixels;    }

(2)復(fù)古效果

復(fù)古效果(sepia)則是將紅、綠、藍三個像素,分別取這三個值的某種加權(quán)平均值,使得圖像有一種古舊的效果。

sepia = function(pixels) {      var d = pixels.data;      for (var i = 0; i < d.length; i +=4) {          var r = d[i];          var g = d[i + 1];          var b = d[i + 2];          d[i] = (r * 0.393) + (g * 0.769) + (b * 0.189); //red          d[i + 1] = (r * 0.349) + (g * 0.686) + (b * 0.168); //green          d[i + 2] = (r * 0.272) + (g * 0.534) + (b * 0.131); //blue              }              return pixels;    }

(3)紅色蒙版效果

紅色蒙版指的是,讓圖像呈現(xiàn)一種偏紅的效果。算法是將紅色通道設(shè)為紅、綠、藍三個值的平均值,而將綠色通道和藍色通道都設(shè)為0。

red = function(pixels) {      var d = pixels.data;      for (var i = 0; i < d.length; i += 4) {          var r = d[i];          var g = d[i + 1];          var b = d[i + 2];          d[i] = (r + g + b) / 3; //紅色通道取平均值          d[i + 1] = d[i + 2] = 0;      }    return pixels;    }

(4)亮度效果

亮度效果(brightness)是指讓圖像變得更亮或更暗。算法將紅色通道、綠色通道、藍色通道,同時加上一個正值或負值。

brightness = function(pixels, delta) {      var d = pixels.data;      for (var i = 0; i < d.length; i += 4) {          d[i] += delta; //red          d[i + 1] += delta; //green          d[i + 2] += delta; //blue              }              return pixels;    }

(5)反轉(zhuǎn)效果

反轉(zhuǎn)效果(invert)是指圖片呈現(xiàn)一種色彩顛倒的效果。算法為紅、綠、藍通道都取各自的相反值(255 – 原值)。

invert = function(pixels) {      var d = pixels.data;          for (var i = 0; i < d.length; i += 4) {          d[i] = 255 - d[i];          d[i + 1] = 255 - d[i + 1];          d[i + 2] = 255 - d[i + 2];      }    return pixels;    }

3.4 將Canvas轉(zhuǎn)化為圖像文件

對圖像數(shù)據(jù)作出修改以后,可以使用toDataURL方法,將Canvas數(shù)據(jù)重新轉(zhuǎn)化成一般的圖像文件形式。

function convertCanvasToImage(canvas) {
var image = new Image();
image.src = canvas.toDataURL("image/png");
return image;
}

4、保存和恢復(fù)上下文

save方法用于保存上下文環(huán)境,restore方法用于恢復(fù)到上一次保存的上下文環(huán)境。

ctx.save();    ctx.shadowOffsetX = 10;  ctx.shadowOffsetY = 10;  ctx.shadowBlur = 5;  ctx.shadowColor = "rgba(0, 0, 0, 0.5)";    ctx.fillStyle = "#CC0000";  ctx.fillRect(10, 10, 150, 150);    ctx.restore();    ctx.fillStyle = "#000000";  ctx.fillRect(180, 10, 150, 100);

上面的代碼一共繪制了兩個矩形,前一個有陰影,后一個沒有。

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
欧美特黄一级大片| 日韩午夜高潮| 亚洲综合五月| 丝袜亚洲另类欧美| 午夜国产欧美理论在线播放| 秋霞影院一区二区三区| 999久久久国产精品| 99精品美女| 秋霞影院一区二区三区| 久久中文字幕av| 亚洲天堂黄色| 国产亚洲毛片在线| 麻豆91精品| 蜜桃91丨九色丨蝌蚪91桃色 | 亚洲精品高潮| 中文字幕视频精品一区二区三区| 日本在线观看不卡视频| 国产麻豆一区二区三区| 久久精品欧洲| 99久久精品国产亚洲精品| 久久性天堂网| 亚州av日韩av| 精品少妇一区| 亚洲男女av一区二区| 午夜久久av| 福利一区二区三区视频在线观看| 久久久成人网| 亚洲精品麻豆| 国产精品久久久免费| 精品免费av在线| 亚洲深深色噜噜狠狠爱网站 | 香蕉久久夜色精品国产| 欧美日韩在线精品一区二区三区激情综合| 久久国产乱子精品免费女| 黄色网一区二区| 在线视频观看日韩| 综合色就爱涩涩涩综合婷婷| 国产乱人伦精品一区| 日本伊人午夜精品| 精品免费av| 久久99青青| 日韩一区欧美| 国产精品毛片久久久| 精品中文一区| 久热re这里精品视频在线6| 天海翼精品一区二区三区| 欧美黑人做爰爽爽爽| 99久久精品费精品国产| 日韩中文字幕无砖| 国产美女高潮在线观看| 亚洲欧美日本视频在线观看| 国产精品久久久久77777丨| 欧美日韩视频网站| 视频一区中文字幕精品| 天堂√8在线中文| 午夜久久福利| 国产精品日韩精品中文字幕| 激情欧美丁香| 国产精品伦一区二区| 欧美精品一二| 卡一卡二国产精品| 首页国产欧美久久| 国产成人久久精品一区二区三区| 每日更新成人在线视频| 麻豆精品在线观看| 久久都是精品| 精品亚洲成人| 国产偷自视频区视频一区二区| 国产精品女主播一区二区三区| 国产精品s色| 久久精品一本| 麻豆91小视频| 性色一区二区| 激情黄产视频在线免费观看| 91精品一区国产高清在线gif| 国产婷婷精品| 亚洲www啪成人一区二区| 综合激情一区| 亚洲免费专区| 国产情侣久久| 国产一区二区三区四区大秀| 国产精品毛片视频| 精品久久久网| 国产精品白浆| 国产精品99一区二区三区| 免费一区二区三区在线视频| 国产精品66| 999久久久精品国产| 99精品电影| 日韩一区电影| 国产高清不卡| 性色av一区二区怡红| 国产美女久久| 免费国产自久久久久三四区久久 | 99精品电影| 中文字幕一区二区三区四区久久 | 国产精品午夜一区二区三区| 91视频一区| 精品视频高潮| 蜜桃av一区二区| 久久精品免费看| 一区二区不卡| 欧美日韩尤物久久| 蜜桃视频一区二区三区在线观看 | 噜噜噜久久亚洲精品国产品小说| 视频一区日韩精品| 99久久九九| 久久精品人人| 香蕉成人av| 国产另类在线| 九色精品91| 国产一区二区三区日韩精品| 蜜桃久久久久久| 激情综合网址| 欧洲av不卡| 老司机免费视频一区二区三区| 香蕉精品999视频一区二区| 国产精品日本一区二区三区在线| 亚洲欧美在线专区| av一区在线| 亚洲一区国产| 亚洲高清久久| 欧美综合另类| 国产一区二区三区不卡av | 日韩中文首页| 免费一级片91| 日韩高清不卡一区| 日韩精品免费一区二区夜夜嗨| 午夜日韩在线| 欧美综合另类| 婷婷视频一区二区三区| 中文字幕一区二区三区四区久久 | 精品国产欧美日韩一区二区三区| 欧美高清不卡| 正在播放日韩精品| 国模 一区 二区 三区| 福利一区和二区| 91视频久久| 久久精品青草| 国产亚洲网站| 欧美三区不卡| 欧美日韩一区二区三区不卡视频| 亚洲精品伊人| 成人国产精选| 首页国产精品| av高清不卡| 亚洲免费婷婷| 国产日韩欧美三级| 久久精品日韩欧美| 欧美国产美女| 亚洲成人三区| 麻豆免费精品视频| 成人精品动漫一区二区三区| 精品国产精品国产偷麻豆| 视频福利一区| 欧美在线不卡| 99久久精品国产亚洲精品| 久久久男人天堂| 视频一区中文字幕| 激情五月综合网| 欧美影院三区| 91精品一区二区三区综合| 蜜桃av一区| 老司机免费视频一区二区| 99国产精品视频免费观看一公开 | 亚洲日本欧美| 欧美激情另类| 尤物网精品视频| 久久精品国产免费| 成人啊v在线| 欧美永久精品| 91久久黄色| 欧美日韩一区自拍| 国产亚洲网站| 国产毛片一区| 国产精品一区二区99| 岛国av在线网站| 日韩专区在线视频| 激情视频网站在线播放色| 亚洲字幕久久| 日韩免费视频| 精品黄色一级片| 日韩综合在线| 成人亚洲欧美| 成人三级高清视频在线看| 精品国产一区二| 欧美成人综合| 国产精品极品| 国产一区二区三区不卡视频网站 | 国产毛片一区二区三区| 欧美69视频| 免费人成精品欧美精品| 国产日本亚洲| 国产一区二区三区视频在线| 91精品在线观看国产| 亚洲精品动态| 成人亚洲一区| 国产精品毛片在线看| 久久美女精品| 视频精品一区|