canvas绘图动态效果

Canvas学习(二)

一、变形(基本思想都是先移动画布,在绘画)

1) 缩放scale()

//缩放scale()

ctx.strokeRect(20,20,100,100);

ctx.scale(3,3);//相当于画布放大了三倍,所以起始坐标都放大了三倍,必须两个参数

ctx.beginPath();

ctx.strokeRect(20,20,100,100);

ctx.scale(0.2,0.2);//会根据上一个的画布大小来缩放,很重要

ctx.beginPath();

ctx.strokeRect(20,20,100,100);

2) 平移translate()

//平移translate()

ctx.strokeRect(20,20,100,100);

ctx.beginPath();

ctx.translate(150,0);//相当于画布移动了这些距离

ctx.lineWidth=10;

ctx.strokeRect(20,20,100,100);

3) 旋转rotate()

//旋转rotate()

ctx.strokeRect(20,20,100,100);

ctx.beginPath();

ctx.rotate(-20*Math.PI/180);//相当于画布根据原点旋转

ctx.lineWidth=10;

ctx.strokeRect(20,20,100,100);

//如果想要围绕原点旋转,则先移动画布

ctx.strokeRect(20,20,100,100);

ctx.beginPath();

ctx.translate(20,20);

ctx.rotate(-20*Math.PI/180);//相当于画布根据原点旋转

ctx.lineWidth=10;

ctx.strokeRect(20,20,100,100);

4) 倾斜setTransform()

//倾斜 setTransform

ctx.strokeRect(20,20,100,100);

ctx.beginPath();

ctx.setTransform(1,10/200,-60/100,1,100,10);

ctx.lineWidth=10;

ctx.strokeRect(20,20,100,100);

5) 综合transform()

二、图形渲染

1) 渐变

//颜色线性渐变需createLinearGradient(0,0,200,200)和addColorStop(0.5,‘#39f‘)结合使用

var runm=ctx.createLinearGradient(0,0,200,200);

runm.addColorStop(0.5,‘#39f‘);

runm.addColorStop(0.8,‘purple‘);

ctx.fillStyle=runm;

ctx.fillRect(0,0,200,200);

//颜色径向渐变需要 createRadialGradient(开始圆的圆心坐标及半径,结束圆的圆心坐标以及半径共六个参数)和addColorStop()使用

var radio=ctx.createRadialGradient(100,100,0,100,100,60)

radio.addColorStop(0,"#39f");

radio.addColorStop(1,"purple");

ctx.fillStyle=radio;

ctx.fillRect(0,0,400,400);

2) 颜色合成层叠

//颜色合成globalCompositeOperation属性

ctx.fillStyle=‘red‘;

ctx.fillRect(0,0,100,100);

//重叠处理方式

ctx.globalCompositeOperation=‘copy‘;//只绘制新图形,删除其他所有内容

ctx.globalCompositeOperation=‘darker‘;//在重叠部分,有两个图形像素相减后决定

ctx.globalCompositeOperation=‘destination-atop‘;//以前的图形不重合的部分会被清除,重叠部分会显示在新画图形的前边

ctx.globalCompositeOperation=‘destination-in‘;//只保留重合部分

ctx.globalCompositeOperation=‘destination-out‘;//新图形会剪切以前的,并清除

ctx.globalCompositeOperation=‘destination-over‘;//新画的图形在以前图形的后边

ctx.globalCompositeOperation=‘lighter‘;//重合部分颜色有两个图形颜色值相加得到

ctx.globalCompositeOperation=‘source-atop‘;//只显示以前图像覆盖的区域

ctx.globalCompositeOperation=‘source-in‘;//只显示以前图像覆盖的区域

ctx.globalCompositeOperation=‘source-out‘;//新图形不重叠的地方才有

ctx.globalCompositeOperation=‘source-over‘;//默认值

ctx.globalCompositeOperation=‘xor‘;//重合部分不显示

//画圆

ctx.beginPath();

ctx.fillStyle=‘green‘;

ctx.arc(100,100,50,0,360*Math.PI/180,true);

ctx.fill();

3) 颜色反转

//颜色反转

var img=ctx.getImageData(0,0,200,200);

var pixed=img.data;

for(var i= 0,n=pixed.length;i<n;i+= 4){

poxed[i]=255-pixed[i];

poxed[i+1]=255-pixed[i+1];

poxed[i+2]=255-pixed[i+2];

}

//重新绘制

ctx.putImageData(img,250,0);

4) 灰度控制

5) 阴影效果

//阴影效果

ctx.shadowColor=‘gray‘;

ctx.shadowOffsetX=20;

ctx.shadowOffsetY=20;

ctx.shadowBlur=10;

var img=new Image();

img.src=‘asd.jpg‘;

img.onload=function(){

ctx.drawImage(img,0,0);

}

三、自定义画板

源码:

<script>

window.onload=function(){

var a=document.getElementById("can");

//检测a.getContext()

//alert(a.getContext);

if(a.getContext){

var ctx= a.getContext(‘2d‘);

var arr=[‘red‘,‘green‘,‘purple‘,‘black‘,‘yellow‘,‘#39f‘];

//画笔样式

ctx.lineWidth=1;

ctx.strokeStyle="red";

//缩放scale()

/*ctx.strokeRect(20,20,100,100);

ctx.scale(3,3);//相当于画布放大了三倍,所以起始坐标都放大了三倍,必须两个参数

ctx.beginPath();

ctx.strokeRect(20,20,100,100);

ctx.scale(0.2,0.2);//会根据上一个的画布大小来缩放,很重要

ctx.beginPath();

ctx.strokeRect(20,20,100,100);*/

//平移translate()

/*ctx.strokeRect(20,20,100,100);

ctx.beginPath();

ctx.translate(150,0);//相当于画布移动了这些距离

ctx.lineWidth=10;

ctx.strokeRect(20,20,100,100);*/

//旋转rotate()

/*ctx.strokeRect(20,20,100,100);

ctx.beginPath();

ctx.rotate(-20*Math.PI/180);//相当于画布根据原点旋转

ctx.lineWidth=10;

ctx.strokeRect(20,20,100,100);*/

//如果想要围绕原点旋转,则先移动画布

/* ctx.strokeRect(20,20,100,100);

ctx.beginPath();

ctx.translate(20,20);

ctx.rotate(-20*Math.PI/180);//相当于画布根据原点旋转

ctx.lineWidth=10;

ctx.strokeRect(20,20,100,100);*/

//倾斜 setTransform

/*ctx.strokeRect(20,20,100,100);

ctx.beginPath();

ctx.setTransform(1,10/200,-60/100,1,100,10);

ctx.lineWidth=10;

ctx.strokeRect(20,20,100,100);*/

//颜色线性渐变需要createLinearGradient(0,0,200,200)和addColorStop(0.5,‘#39f‘)结合使用

/*var runm=ctx.createLinearGradient(0,0,200,200);

runm.addColorStop(0.5,‘#39f‘);

runm.addColorStop(0.8,‘purple‘);

ctx.fillStyle=runm;

ctx.fillRect(0,0,200,200);*/

//颜色径向渐变需要 createRadialGradient(开始圆的圆心坐标及半径,结束圆的圆心坐标以及半径共六个参数)和addColorStop()使用

/*var radio=ctx.createRadialGradient(100,100,0,100,100,60);

radio.addColorStop(0,"#39f");

radio.addColorStop(1,"purple");

ctx.fillStyle=radio;

ctx.fillRect(0,0,400,400);*/

//颜色合成globalCompositeOperation属性

/*ctx.fillStyle=‘red‘;

ctx.fillRect(0,0,100,100);

//重叠处理方式

ctx.globalCompositeOperation=‘copy‘;//只绘制新图形,删除其他所有内容

ctx.globalCompositeOperation=‘darker‘;//在重叠部分,有两个图形像素相减后决定

ctx.globalCompositeOperation=‘destination-atop‘;//以前的图形不重合的部分会被清除,重叠部分会显示在新画图形的前边

ctx.globalCompositeOperation=‘destination-in‘;//只保留重合部分

ctx.globalCompositeOperation=‘destination-out‘;//新图形会剪切以前的,并清除

ctx.globalCompositeOperation=‘destination-over‘;//新画的图形在以前图形的后边

ctx.globalCompositeOperation=‘lighter‘;//重合部分颜色有两个图形颜色值相加得到

ctx.globalCompositeOperation=‘source-atop‘;//只显示以前图像覆盖的区域

ctx.globalCompositeOperation=‘source-in‘;//只显示以前图像覆盖的区域

ctx.globalCompositeOperation=‘source-out‘;//新图形不重叠的地方才有

ctx.globalCompositeOperation=‘source-over‘;//默认值

ctx.globalCompositeOperation=‘xor‘;//重合部分不显示

//画圆

ctx.beginPath();

ctx.fillStyle=‘green‘;

ctx.arc(100,100,50,0,360*Math.PI/180,true);

ctx.fill();*/

//颜色反转

/*var img=ctx.getImageData(0,0,200,200);

var pixed=img.data;

for(var i= 0,n=pixed.length;i<n;i+= 4){

poxed[i]=255-pixed[i];

poxed[i+1]=255-pixed[i+1];

poxed[i+2]=255-pixed[i+2];

}

//重新绘制

ctx.putImageData(img,250,0);*/

//阴影效果

ctx.shadowColor=‘gray‘;

ctx.shadowOffsetX=20;

ctx.shadowOffsetY=20;

ctx.shadowBlur=10;

var img=new Image();

img.src=‘asd.jpg‘;

img.onload=function(){

ctx.drawImage(img,0,0);

}

}

}

</script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 09:04:06

canvas绘图动态效果的相关文章

canvas 绘图api的位置问题

今天因为canvas绘图的为之问题浪费了一些时间. 我们知道canvas的默认宽高是300X150嘛. 实际使用的时候当然是自定义一个高宽啦. 在js中通过canvasDom.style设置了某个高宽的时候,canvas在页面上也确实伸缩了. 但是用某些api的时候,传入位置参数时,还是按照300X150规格来处理位置的!如果想让位置居中的话,传入canvas.width/2或canvas.height/2就好了. 这是之前留意过的问题,今天才发现.可怜我试错地在模拟器上反复折腾,确定真相的我眼

HTML学习总结(四)【canvas绘图、WebGL、SVG】

一.Canvas canvas是HTML5中新增一个HTML5标签与操作canvas的javascript API,它可以实现在网页中完成动态的2D与3D图像技术.<canvas> 标记和 SVG以及 VML 之间的一个重要的不同是,<canvas> 有一个基于 JavaScript 的绘图 API,而 SVG 和 VML 使用一个 XML 文档来描述绘图.SVG 绘图很容易编辑与生成,但功能明显要弱一些. canvas可以完成动画.游戏.图表.图像处理等原来需要Flash完成的一

引言:Canvas绘图API快速入门

引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏动画效果的原理是怎样的?本篇文章将带您在20分钟内快速了解和上手HTML5游戏开发的神器:Canvas绘制API. 一.Canvas是什么? Canvas就是一个画布,可以进行画任何的线.图形.填充等一系列的操作,而且操作的画图就是js,所以让js编程到了嗑药的地步.另外Canvas不仅仅提供简单的

伙伴们休息啦canvas绘图夜空小屋

HTML5 canvas绘图夜空小屋 伙伴们园友们,夜深了,休息啦,好人好梦... 查看效果:http://hovertree.com/texiao/html5/28/ 效果图如下: 代码如下: 1 <!doctype html> 2 <html> 3 <head><meta name="viewport" content="width=device-width, initial-scale=1" /> 4 <t

Android中Canvas绘图之Shader使用图文详解

概述 我们在用Android中的Canvas绘制各种图形时,可以通过Paint.setShader(shader)方法为画笔Paint设置shader,这样就可以绘制出多彩的图形.那么Shader是什么呢?做过GPU绘图的同学应该都知道这个词汇,Shader就是着色器的意思.我们可以这样理解,Canvas中的各种drawXXX方法定义了图形的形状,画笔中的Shader则定义了图形的着色.外观,二者结合到一起就决定了最终Canvas绘制的被色彩填充的图形的样子. 类android.graphics

Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解

概述 类android.graphics.PorterDuffXfermode继承自android.graphics.Xfermode.在用Android中的Canvas进行绘图时,可以通过使用PorterDuffXfermode将所绘制的图形的像素与Canvas中对应位置的像素按照一定规则进行混合,形成新的像素值,从而更新Canvas中最终的像素颜色值,这样会创建很多有趣的效果.当使用PorterDuffXfermode时,需要将将其作为参数传给Paint.setXfermode(Xfermo

Android中Canvas绘图基础详解(附源码下载)

Android中,如果我们想绘制复杂的自定义View或游戏,我们就需要熟悉绘图API.Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形.Canvas绘图有三个基本要素:Canvas.绘图坐标系以及Paint.Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要传入要绘制的图形的坐标形状,还要传入一个画笔Paint.drawXXX方法以及传入其中的坐标决定了要绘制的图形的形状

canvas绘图详解笔记(一)

声明一下:这里我不会用太多文字去详解介绍canvas是什么,相信了解过canvas的人都知道它的魅力所在,如果你对canvas还比较陌生的话,建议可以查阅相关资料了解一下.这里我将对canvas绘图详解课程做一次详细的笔记,方便大家和自己日后可以学习.那么接下来就是直接进入笔记内容的学习: 首先创建一个canvas元素,我们只需要在html文件中加入这么一句代码: <canvas id="canvas">当前浏览器不支持canvas,请更换浏览器使用!</canvas

获取canvas绘图环境

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/32925369 我们用的最基本的绘图环境在canvas中绘图,通过调用canvas对象的getContext()方法来获取绘图环境.getContext()方法只需要一个参数:绘图环境的类型.在游戏中,我们使用2D类型的绘图环境. 获取canvas绘图环境 <!--<!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前.--&