canvas使用3
颜色合成 globalCompositeOperation 属性:
|
1
2
3
4
5
6
7
8
9
10
11
|
//先绘制一个图形。ctx.fillStyle = "#00ff00";ctx.fillRect(10,10,50,50);//设置 lobalCompositeOperation 属性。ctx.globalCompositeOperation = "source-over";//source-over:新图像绘制于画布已由图像上方。 //默认//绘制一个新图像。ctx.beginPath();ctx.fillStyle = "#ff0000";ctx.arc(50,50,30,0,2*Math.PI);ctx.fill(); |
|
1
2
|
ctx.globalCompositeOperation = "copy";//copy:只图像绘新图像,删除其它图像。 |
|
1
2
|
ctx.globalCompositeOperation = "darker";//darker:在图形重叠的地方,其颜色由两个颜色值相减之后决定。 |
|
1
2
|
ctx.globalCompositeOperation = "destination-atop";//destination-atop:画布上已有的内容只会在它和新图像重叠的地方保留。 |
|
1
2
|
ctx.globalCompositeOperation = "destination-in";//destination-in:画布上已有的内容和新图像重叠的地方,保留已有的内容。 |
|
1
2
|
ctx.globalCompositeOperation = "destination-out";//destination-in:画布上已有的内容和新图像不重叠的地方,保留已有的内容。 |
|
1
2
|
ctx.globalCompositeOperation = "destination-over";//destinationo-ver:新图像绘制在已由图像下面。 |
|
1
2
|
ctx.globalCompositeOperation = "lighter";//darker:在图形重叠的地方,其颜色由两个颜色值相加之后决定。 |
|
1
2
|
ctx.globalCompositeOperation = "source-atop";//source-atop:在与已有图形重叠的地方,才显示的绘制新图像。 |
|
1
2
|
ctx.globalCompositeOperation = "source-ind";//source-in:在与已有图形重叠的地方,才显示的绘制新图像 ,忽略原有图像。 |
|
1
2
|
ctx.globalCompositeOperation = "source-out";//source-out:在与已有图形不重叠的地方,才显示绘制的新图像。 |
|
1
2
|
ctx.globalCompositeOperation = "xor";//xor:在重叠和正常绘制的其它地方的地方,图像都为透明。 |
颜色反转 :
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
var img = new Image();img.src="face.jpg";img.onload = function() {ctx.drawImage(img,0,0);var imageData = ctx.getImageData(0,0,250,250);var pix = imageData.data;for(var i = 0 , n = pix.length;i<n;i += 4 ) { pix[i] = 255-pix[i]; pix[i+1] = 255-pix[i+1]; pix[i+2] = 255 -pix[i+2];}ctx.putImageData(imageData,250,0);} |
阴影效果:
|
1
2
3
4
5
6
7
8
9
|
ctx.shadowColor = "#f00"; //设置阴影颜色ctx.shadowBlur=10; //设置阴影的羽化量ctx.shadowOffsetX = 20; //设置阴影X 坐标移动量ctx.shadowOffsetY = 30; //设置阴影Y 坐标移动量var img = new Image();img.src= "face.jpg";img.onload = function() { ctx.drawImage(img,0,0);} |
自定义画板:
- 建立画板
1234567891011121314151617181920212223242526272829303132333435363738394041
varcanvas = document.getElementById("myCanvas")varctx = canvas.getContext("2d");//绘制一个黑色矩形为画板ctx.fillStyle="black";ctx.fillRect(0,0,600,300);//定义一些标记varonoff =false;//变量onoff 为判断是否按下鼠标varoldx = -10;//由于鼠标是有大小的,这里减去 10.varoldy = -10;varlinecolor ="white";//线条颜色varlinw =4;//线条宽度//添加鼠标事件canvas.addEventListener("mousemove",draw,true);//注意鼠标事件是在画布“ canvas”上的canvas.addEventListener("mousedown",dowm,false);canvas.addEventListener("mouseup",up,false);//分别定义三个事件函数functiondowm(event) {onoff =true;//设置为true,用于判断oldx = event.pageX-10;//jQuery 事件(event)pageX 属性:oldy = event.pageY-10;}functionup() {onoff =false;}functiondraw(event) {if(onoff ==true) {varnewx = event.pageX-10;//实时取得新的坐标varnewy = event.pageY-10;ctx.beginPath();ctx.moveTo(oldx,oldy);ctx.lineTo(newx,newy);ctx.strokeStyle = linecolor;ctx.lineWidth = linw;ctx.lineCap="round";ctx.stroke();oldx = newx;//在移动的过程中上一时新坐标变为下一时老坐标oldy = newy;};} - 完整画板与导出功能:
123456789
//添加按钮<butto style="width:80px;background-color:yellow;"onclick='linecolor="yellow";'>YELLOW</button>//注意这里 onclick 为单引号。//建立以个 <img>标签,在用 toDataURL 函数导出内容//添加代码段functioncopyimage(event) {varimage_pgn_src = canvas.toDataURL("image/pgn");document.getElementById("image_pgn").src = image_pgn_src;}
canvas使用3的更多相关文章
- html5 canvas常用api总结(三)--图像变换API
canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...
- 【探索】利用 canvas 实现数据压缩
前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...
- 简单入门canvas - 通过刮奖效果来学习
一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...
- 获取Canvas当前坐标系矩阵
前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...
- Canvas坐标系转换
默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角坐标为x=0,y=0的点称作原点.在默认坐标系中,每一个点的坐标都是直接 ...
- Canvas绘图之平移translate、旋转rotate、缩放scale
画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...
- 用html5的canvas和JavaScript创建一个绘图程序
本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...
- html5标签canvas函数drawImage使用方法
html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...
- 使用 JavaScript 和 canvas 做精确的像素碰撞检测
原文地址:Pixel accurate collision detection with Javascript and Canvas 译者:nzbin 我正在开发一个需要再次使用碰撞检测的游戏.我通常 ...
- H5项目开发分享——用Canvas合成文字
以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...
随机推荐
- 【并行计算】用MPI进行分布式内存编程(一)
通过上一篇关于并行计算准备部分的介绍,我们知道MPI(Message-Passing-Interface 消息传递接口)实现并行是进程级别的,通过通信在进程之间进行消息传递.MPI并不是一种新的开发语 ...
- orm 缺点
背景 提起orm,在我开发这几年可是阴魂不散,因为我的开发没人带,全是自己琢磨,好处是很多东西都懂,都理解的透彻,缺点是见得少,接触少.而我一直没用orm,但是又到处听说orm,但我总想不明白有啥用处 ...
- System.Web.Routing入门及进阶 上篇
System.Web.Routing已经作为一个程序集包含在.net3.5sp1中发布了.虽然我们并没有在3.5sp1中发现Asp.net Mvc的踪迹,但是亦以感觉到它离我们不远了. System. ...
- SSD安装记录
这两天配置SSD,折腾了一两天,终于搞定了,记录下自己遇到的大坑. 1.安装SSD 安装参考:http://blog.csdn.net/shawncheer/article/details/53227 ...
- 【LOJ】#2076. 「JSOI2016」炸弹攻击
题解 我冷静一下,话说如果去掉建筑和R的限制好像是模拟退火吧 然后开始写模拟退火了,起始点就随机一个敌人作为起始点 没对着数据写了一下获得了70pts,感到美滋滋 然后对着数据卡了很久--发现有个数据 ...
- spark web ui中的skipped的含义
顾名思义,跳出的意思啦. 例如如图: skipped的stages代表是已经执行过了.所以不需要再执行了. 如何,你有一个 testRdd.然后先做 testRdd.Filter("xxx& ...
- Python - 从列表中取随机数
题目是:从一个有序列表中任取几个值组成新的列表 以下有2种思路去实现 1. 把那列表任意排列,截取尾巴上面的指定长度 import random total = 100 onetime = 7 x_l ...
- 减少Building 'Xxx' Gradle project info等待时间
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6640279.html 从Github上看到好的Demo想要Download下来学习.导入到Android ...
- Typecho-Material主题不支持Kotlin代码高亮的解决方案
Typecho-Material主题不支持Kotlin代码高亮的解决方案 Overview 最近通过Typecho搭建了一个Blog,采用了 Material主题,其他的都挺好,也挺喜欢这个主题,但是 ...
- Atom-同步设置
Atom-同步设置 参考博客 CNBLOG First 首先呢,如果我们想要通过Atom的设置和插件的话,我们需要这个一个Atom插件. PS: 因为Gist被墙的原因,所以需要***才行,我挂了ss ...