canvas入门基础3 完结篇~

线性渐变

var linear= context.createLinearGradient(xStart,yStart,xEnd,yEnd)

线性渐变颜色linear.addColorStop(offset,color)

xstart:渐变开始点x坐标
ystart:渐变开始点y坐标
xEnd:渐变结束点x坐标
yEnd:渐变结束点y坐标
offset:设定的颜色离渐变结束点的偏移量(0~1)
color:绘制时要使用的颜色

var oC = document.querySelector('#c1');
var gd = oC.getContext('2d');
var linear = gd.createLinearGradient(300,100,400,500);
linear.addColorStop(0,'red');
linear.addColorStop(1,'aqua');
gd.fillStyle = linear;
gd.font = '100px 微软雅黑';
gd.fillText('于晓鱼',300,300);
Paste_Image.png

径向渐变

var rg=context.createRadialGradient(xStart,yStart,radiusStart,xEnd,yEnd,radiusEnd)

径向渐变 颜色rg.addColorStop(offset,color)

radiusStart:发散开始圆的半径
radiusEnd:发散结束圆的半径
(其它同上)
同心圆径向渐变小例子

           var canvas = document.getElementById('c1');
            var context = canvas.getContext('2d');
            var g1 = context.createRadialGradient(200, 150, 0, 200, 150, 100);
            g1.addColorStop(0.1, 'rgb(255,0,0)');
            g1.addColorStop(1, 'rgb(50,0,0)');
            context.fillStyle = g1;
            context.beginPath();
            context.arc(200, 150, 100, 0, Math.PI * 2, true);
            context.closePath();
            context.fill();
Paste_Image.png

给图形绘制阴影
context.shadowOffsetX :阴影的横向位移量(默认值为0)
context.shadowOffsetY :阴影的纵向位移量(默认值为0)
context.shadowColor :阴影的颜色
context.shadowBlur :阴影的模糊范围(值越大越模糊)

           var oC = document.querySelector('#c1');
            var context= oC.getContext('2d');
            context.shadowOffsetX = 10;
            context.shadowOffsetY = 10;
            context.shadowBlur = 20;
            context.shadowColor = 'red';
            context.fillStyle = 'black';
            context.fillRect(100,100,200,100);
Paste_Image.png

绘制图像

绘图: context.drawImage

1, context.drawImage(image,x,y)

    image:Image对象var img=new Image(); img.src="url(...)";

    x:绘制图像的x坐标

    y:绘制图像的y坐标

2, context.drawImage(image,x,y,w,h)

    image:Image对象var img=new Image(); img.src="url(...)";

    x:绘制图像的x坐标

    y:绘制图像的y坐标

    w:绘制图像的宽度

    h:绘制图像的高度

3, context.drawImage(image,sx,sy,sw,sh,dx,dy,dw,dh):选取图像的一部分矩形区域进行绘制

    image:Image对象var img=new Image(); img.src="url(...)";

    sx:图像上的x坐标

    sy:图像上的y坐标

    sw:矩形区域的宽度

    sh:矩形区域的高度

    dx:画在canvas的x坐标

    dy:画在canvas的y坐标

    dw:画出来的宽度

    dh:画出来的高度

用第三个方法来写个小例子吧

            var oC = document.querySelector('#c1');
            var gd = oC.getContext('2d');
            var oImg = new Image();
            oImg.onload = function(){
                gd.drawImage(oImg,
                    0,198,136,153,
                    100,100,272,306
                );
            };

            oImg.src = '1.jpg';

原图

Paste_Image.png

选取后在画布上的效果

Paste_Image.png

像素处理:

获取像素颜色数组:

 var imagedata=context.getImageData(sx,sy,sw,sh)
sx:cavas的x轴坐标点

sy:canvas的y轴坐标点

sw:距离x的宽度

sh:距离y的高度

可以利用context.getImageData返回的一个像素颜色数组,顺序是所取像素范围的从左到右,从上到下,数组的元素是(所有图形,包括图片,和绘制的图形)每个像素的rgba
设置像素颜色

context.putImageData(imagedata,dx,dy,dirtyX,dirtyY,dirtyWidth,dirtyHeight) 
对imagedata数组中的各个像素的r、g、b、a值进行修改,再调用putImageData方法进行绘制

    imagedata:修改后的imagedata

    dx:重绘图像的起点横坐标(重绘的起点和原来的图像一致的话就会把原来的图形覆盖掉,看起来就像是原来的图像变成现在的图像一样)

    dy:重绘图像的起点纵坐标

    //以下可选参数,设置重绘的矩形范围,如果缺省,默认会重绘所有的imegedata

    dirtyX:矩形左上角x轴坐标

    dirtyY:矩形左上角y轴坐标

    dirtyWidth:矩形长度

    dirtyHeight:矩形高度

小例子:

           var oC = document.querySelector('#c1');
            var gd = oC.getContext('2d');
            var oImg = new Image();
            oImg.src = 'tu.jpg';
            oImg.onload = function(){
                gd.drawImage(oImg,100,20);
                var imagedata= gd.getImageData(0,0,oC.width,oC.height);
                var d = imagedata.data;
                for(var i = 0;i<d.length;i+=4){
                    d[i] = d[i+1]=d[i+2] = (d[i]+d[i+1]+d[i+2])/3;
                }
                gd.putImageData(imagedata,0,0);
            };
Paste_Image.png

本文如有错误,请及时留言给我纠正~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容