canvas学习
canvas学习(2)
1.绘制图形
var image = document.images[0]; //选择一个<img>
context.drawImage(image,10,10); //传入这个元素,以及绘制该图像的起点的x和y坐标。
2.渐变
var gradient = context.createLinearGradient(30,30,70,70);
gradient.addColorStop(0,"white");
gradient.addColorStop(1,"black");
//绘制红色矩形
context.fillStyle = "#f00";
context.fillRect(10,10,50,50);
//绘制渐变矩形
context.fillStyle = gradient;
context.fillRect(30,30,50,50);
3.模式
重复的图像,可以用来填充或描边图形。要创建一个新模式,可以调用createPattern()方法并传入两个参数:一个HTML<img>
元素和一个表示如何重复图像的字符串。其中,第二个参数的值和CSS的background-repeat属性相同repeat、repeat-x、repeat-y和no-repeat。第一个参数可以是一个<video>
元素,或另一个<canvas>
元素。
4.使用图像数据
getImageData()取得原始图像数据。这个方法接收4个参数:要取得其数据的画面区域的x,y坐标以及该区域的像素宽度和高度。
var imageData = context.getImageData(10,5,50,50);
返回的imageData的实例。每个ImageData对象都有三个属性:width、height、data。其中data属性是一个数组,保存着图像中的每一个像素的数据。在data数组中,每一个像素用四个元素来保存,分别表示红、绿、蓝、透明度值。因此,第一个像素的数据就保存在数组的第0到第3个元素中。
var drawing = document.getElementById('draw');
if(drawing.getContext){
var context = drawing.getContext('2d'),
image = document.images[0],
imageData,data,i,len,average,
red,green,blue,alpha;
//绘制原始图像
context.drawImage(image,0,0);
//取得图像数据
imageData = context.getImageData(0,0,100,100);
data = imageData.data;
for(i = 0, len = data.length; i < len; i+=4){
red = data[i];
green = data[i+1];
blue = data[i+2];
alpha = data[i+3];
average = Math.floor((red + green + blue) / 3);
//设置颜色值,透明度不变
data[i] = average;
data[i+1] = average;
data[i+2] = average;
}
//回写图像数据并显示结果
imageData = data;
context.putImageData(imageData,0,0);
}
5.合成
2D上下文中所有绘图操作的属性:globalAlpha和globalCompositionOperation。其中,globalAlpha是一个介于0和1之间的值(包括0和1),用于指定所有绘图的透明度。默认值为0.如果所有后续操作都要基于相同的透明度,就可以先把globalAlpha设置为适当值,然后绘制,最后再把它设置回默认值0。
context.fillStyle = '#f00';
context.fillRect(10,10,50,50);
//修改全局透明度
context.globalAlpha = 0.5;
//绘制蓝色矩形
context.fillStyle = 'rgba(0,0,255,1)';
context.fillRect(30,30,50,50);
//重置全局透明度。
context.globalAlpha = 0;
globalCompositionOperation表示后绘制的图形怎么和先绘制的图形结合。 source-over(默认值):后绘制的图形位于先绘制的图形上方。 source-in:后绘制的图形与先绘制的图形重叠的部分可见,两者的其他分部完全透明。 source-out:后绘制的图形与先绘制的图形不重叠部分可见,先绘制的图形完全透明。 …