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
var
canvas = document.getElementById(
"myCanvas"
)
var
ctx = canvas.getContext(
"2d"
);
//绘制一个黑色矩形为画板
ctx.fillStyle=
"black"
;
ctx.fillRect(0,0,600,300);
//定义一些标记
var
onoff =
false
;
//变量onoff 为判断是否按下鼠标
var
oldx = -10;
//由于鼠标是有大小的,这里减去 10.
var
oldy = -10;
var
linecolor =
"white"
;
//线条颜色
var
linw =4;
//线条宽度
//添加鼠标事件
canvas.addEventListener(
"mousemove"
,draw,
true
);
//注意鼠标事件是在画布“ canvas”上
的
canvas.addEventListener(
"mousedown"
,dowm,
false
);
canvas.addEventListener(
"mouseup"
,up,
false
);
//分别定义三个事件函数
function
dowm(event) {
onoff =
true
;
//设置为true,用于判断
oldx = event.pageX-10;
//jQuery 事件(event)pageX 属性:
oldy = event.pageY-10;
}
function
up() {
onoff =
false
;
}
function
draw(event) {
if
(onoff ==
true
) {
var
newx = event.pageX-10;
//实时取得新的坐标
var
newy = 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 函数导出内容
//添加代码段
function
copyimage(event) {
var
image_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上的,与 ...
随机推荐
- Service Mesh 及其主流开源实现解析(转)
什么是 Service mesh Service Mesh 直译过来是 服务网格,目的是解决系统架构微服务化后的服务间通信和治理问题.服务网格由 sidecar 节点组成.在介绍 service me ...
- Linux屏幕记录命令script
Script -a action.log –t 2> time.log按ctrl+d 退出录制回访 scriptreplay time.log action.log或者直接用查看命令cat,ta ...
- 前后端分离之mockjs基本介绍
安装与使用 # 安装 npm install mockjs #使用 Mock var Mock = require('mockjs') var data = Mock.mock({ // 属性 lis ...
- ACM-ICPC 2018年北京网络赛 D-80 days
题意: n个城市环形连接,初始有c的钱,每到i城市,会获得a[i]的金钱,失去b[i]的金钱,问能否走遍这n个城市,且过程中金钱不为负数,输出起始城市,如果答案有多个,输出最小的数字. 思路:a[i] ...
- mysql连接池模块
如果不想程序在查询数据时卡死或等待过长时间,一般不推荐在node中开启一个连接后全部查询都用这个链接并且不关闭.因为node里面的mysql不像php里的那样会在完成查询后断开,只要不主动断开,连接一 ...
- MongoDB学习笔记-2(使用java连接Mongo)
本人使用maven创建的java工程,mongo-java-driver使用的是3.2.2,这个驱动2.x和3.x是有差异的 pom.xml配置加入: <dependency> <g ...
- jQuery事件绑定—on()、bind()与delegate()
啃了一段日子的js相关了,学的过程中发现在jQuery中绑定事件时,有人用bind(),有人用on(),有人用delegate(),还有人用live(),看代码的时候觉得都实现功能了也就掀过去了,只是 ...
- windows10系统定时1分钟执行php(不借助windows的.bat文件)原创
第一步:确认windows上是否配置好了php环境变量,我用xampp安装的lamp环境,默认已经配置好了php的环境变量.在CMD中执行php -v 显示相应的php版本 php -v 如果显示上 ...
- Webpack vs Gulp
Webpack vs Gulp 谁会被拍死在沙滩上 本文组织结构 理想的前端开发流程 Gulp 为何物 Webpack 又是从哪冒出来的 结论 文章有点长,总共 1800 字,阅读需要 18 分钟 ...
- Codeforces 772C 构造 数学 + dp + exgcd
首先我们能注意到两个数x, y (0 < x , y < m) 乘以倍数互相可达当且仅当gcd(x, m) == gcd(y, m) 然后我们可以发现我们让gcd(x, m)从1开始出发走 ...