canvas使用2
文字对齐方式 :
- 水平对齐
1234
//是用 textAlign 属性设置水平对齐方式(默认坐标点)ctx.textAlign ="start";ctx.font ="30px Arial";ctx.fillText("Hello World",100,50);//水平的三个坐标点分别为 start(a),left(a); center(b) ;end(c),right(c).
- 垂直对齐:
1234
//是用 textBaseline 属性设置垂直对齐方式(默认坐标点)ctx.textBaseline ="bottom";ctx.font ="30px Arial";ctx.fillText("Hello World",100,50);//垂直的三个坐标点分别为 bottom(a),alphabetic(b);middle(c) ;top(d),hanging(d), //a 与 b 的差距等于canvas 最上边与浏览器最上边的差距。
图片操作:
- 通过 <img>标签//此方法要插入图片
123456789101112131415
//先在 html 中加入标签<img>插入图片<img id="face"src="face.jpg"alt="The Face"width="240"height="240"/></br>//注意 img 最后完整”/”,否则可能显示不出来。*****************************************************************<script>varc = document.getElementById("myCanvas");varctx = c.getContext("2d");//在 canvas 中获取<img>标签idvarimg = document.getElementById("face");//给对象 img 添加onload 事件监听img.onload =function() {//通过函数 drawImage 将图片绘制到画板上ctx.drawImage(img,0,0);}</script> - 通过 JavaScript 的Image 对象//此方法不需插入图片
1234567891011
<script>varc = document.getElementById("myCanvas");varctx = c.getContext("2d");//建立 Image 对象varimg =newImage();//通过 src 属性来加载图片img.src ="face.jpg";img.onload =function() {ctx.drawImage(img,0,0);}</script> - drawImage 函数的三种函数模型 //注意参数只有这三种情况
1234567891011121314
//三个参数分别是要绘制的对象,对象在 canvas 中定位的坐标值 X、Y 。(图片左上角点)drawImage(image,dx,dy);//参数为3//后两个参数分别是要绘制图片的宽度和高度。drawImage(image,dx,dy,dw,dh);//参数为5//多的四个参数分别是要截取图片部分的起始位置坐标 X、Y ,相对起始位置的宽和高。(指的是在要绘制的图片上截取后绘制在 canvas 上)drawImage(image,,sx,sy,sw,sh,dx,dy,dw,dh);//参数为 9例子:img.onload =function() {ctx.drawImage(img,10,10);ctx.drawImage(img,260,10,100,100);ctx.drawImage(img,50,50,100,100,260,130,100,100);} 利用 getImageData 和putImageData 绘制图片:
1234567891011121314151617181920212223varimg =newImage();img.src ="face.jpg";img.onload =function() {//利用 drawImage 函数在canvas 上绘制图片。ctx.drawImage(img,10,10);///利用 getImageData 函数获取canvas 上的图片数据,四个参数分别为:起始位置所谓坐标值 X、Y ,选择区域的长宽。(注意如果 canvas 区域中无绘制图片则取得空白)varimgData = ctx.getImageData(50,50,200,200);//获取的是已经绘制在 canvas 上的图像//利用函数 putImageData 将得到的像素数据绘制到画板上。七个参数分别是:像素数据、绘制图片的起始坐标 X、Y ,获取图片的起始位置X、Y,获取图片的长宽。(如果后面四个参数省略,则获取整个图片)ctx.putImageData(imgData,10,260);ctx.putImageData(imgData,200,260,50,50,100,100);//注意这里相差的四个参数};//在使用如 getImageData 这个函数时,为了阻止欺骗,浏览器会追踪 image data。当你把一个 “跟 canvas 的域不同的 ”图片放到 canvas 上,这个canvas 就成为“tainted”(被污染的,脏的 ),浏览器就不让你操作该 canvas 的任何像素。这对于阻止多种类型的 XSS/CSRF 攻击(两种典型的跨站攻击)。我在进行一个本地的html 网页,操作本地的一张图片时 chrome 浏览器也报错,可能是因为本地网页的域为 file://,而本地图片肯定不是以 file://开头的,如windows 环境下的某个图片为 : c:\tmp\test.png。(在测试 firbox 时没有问题)利用 createImageData 新建像素:
12345678910111213141516//createImageData(a,b) // 创建a*b 像素(长宽)的 imagaData 对象,不修改像素的话为白色,//代码img.onload =function() {varimageData = ctx.createImageData(100,100);for(vari =0;i<imageData.data.length;i+=4) {//像素设置imageData.data[i+0] = 255;//为红色imageData.data[i+1] = 0;imageData.data[i+2] = 0;imageData.data[i+3] = 255;}ctx.putImageData(imageData,0,0);}//也可以这样设置varimgData = ctx.getImageData(50,50,200,200);varimageData = ctx.createImageData(imgData);// 得到的只是像素大小
变形:
- scale 函数:放大、缩小、翻转://利用 scale 函数实现图片的放大、缩小,两个参数分别对应 X、Y 轴坐标的放大
123456789101112131415161718192021
ctx.scale(3,3);//放在要绘画的图片的前面ctx.beginPath();strokeStyle ="#ccc";//绘制了一个矩形,由于 scale 函数,实际绘制的矩形坐标为 (30,30,450,300).ctx.strokeRect(10,10,150,100);//利用 scale 函数实现图片的缩小。ctx.scale(0.5,0.5);//注意使用scale 之后对接下来所有绘制的图片都有效;恢复的方法:如使用scale(2,2)之后,在想恢复的地方使用scale(0.5,0.5).;或者直接将scale 放在一个js 函数里调用。varimg =newImage();img.src ="face.jpg";img.onload =function() {ctx.drawImage(img,10,10);//将函数 scaleY 轴参数设为负值,同时将 drawImage 函数的起始点 Y 轴设为负值,使图片翻转。ctx.scale(1,-1);ctx.drawImage(img,250,-250);//此时注意翻转后图片最上面的点为原图片最下面的点};//步骤总结:1.使用scale(1-1)将图片以canvas 最上边对称映射2.在设置图片位置时相对原来要设置的位置,y 轴取相应的负值(这里如果想象成坐标轴区域的话,也可以使用translate 进行平移,不过注意移动的符号)。同理可以实现左右翻转。 //scale 翻转后的恢复步骤同样;如果像上面一样在一个函数内调用则无需。
- translate://利用 translate 函数进行平移,两个参数分别是 X、Y 轴上平移的距离。//注意此函数移动的是 canvas 的坐标原点。
1234567
ctx.translate(50,100);ctx.beginPath();ctx.strokeStyle ="#000";//绘制的矩形平移后的坐标为( 60,100 ,150, 100)相当于平移起始点坐标ctx.strokeRect(10,10,150,100);//与scale 一样的恢复步骤。//结合使用translate 与scale 也可以将绘制的图形进行翻转;<em id="__mceDel" style="line-height: 1.5; font-family: verdana, Arial, Helvetica, sans-serif; font-size: 14px; "> </em> - rotate:
123456789
ctx.beginPath();ctx.strokeStyle ="#000";ctx.strokeRect(200,50,100,50);//利用 rotate 函数,参数为旋转的弧度。(默认以( 0,0 )为中心进行顺时针旋转)ctx.rotate(45*Math.PI/180);ctx.beginPath();ctx.strokeStyle ="#f00";ctx.strokeRect(200,50,100,50);1234567891011121314以自己为中心进行旋转ctx.beginPath();ctx.strokeStyle ="#000";ctx.strokeRect(200,50,100,50);//先用 translate 函数将canvas 的起始坐标移到矩形中心处ctx.translate(250,75);//再用 rotate 函数使图像绕起始点(矩形中心点)旋转ctx.rotate(45*Math.PI/180);//最后用 translate 函数将canvas 的起始坐标移回(0,0)ctx.translate(-250,-75);ctx.beginPath();ctx.strokeStyle ="#f00";ctx.strokeRect(200,50,100,50);
//总结:一些如颜色设置,大小、位置变化等都是作用与全局的,所以使用save与restore;图形的绘制最后的呈现结果可以理解为先绘制好这个图形,在根据顺序经历之前定义的变化,最后呈现结果。
canvas使用2的更多相关文章
- 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上的,与 ...
随机推荐
- 图解USB协议之一 枚举过程【转】
转自:http://blog.csdn.net/myarrow/article/details/8270060 0. 枚举流程 • 连接了设备的 HUB 在 HOST 查询其状态改变端点 时返回对应的 ...
- Video.js 简单的使用介绍
vedio.js 是一款视频播放插件,它会自动检测浏览器对 HTML5 的支持情况,如果不支持 HTML5 则自动使用 Flash 播放器.下面来介绍下它的使用: 引用video-js.cs样式文件和 ...
- Linux 彻底删除用户
想要完全删除用户账号(也就是删除所有与该用户相关的文件),以下这两种方法个人觉得是最好的: (1)使用 userdel -r xiaoluo命令删除. (2)先使用userdel xiaoluo 删除 ...
- 【noip模拟赛2】牛跳
描述 John的奶牛们计划要跳到月亮上去.它们请魔法师配制了P(1 <= P <=150,000)种药水,这些药水必需安原来的先后次序使用,但中间可以跳过一些药水不吃.每种药水有一个“强度 ...
- 使用IDEA搭建spring
从前使用eclipse开发,集成jar包,现在使用maven来管理 一: 1.框架 2.pom 需要spring core与spring context. <?xml version=" ...
- 黑苹果 之 神舟战神Z7M-SL7D2
黑苹果引导工具 Clover 配置详解:http://www.jianshu.com/p/b156b0177a24 神舟Z7m UEFI+GPT安装WIN10+MAC OS X Yosemite双系统 ...
- JSR教程1——JSR 303 - Bean Validation介绍
1.Bean Validation 在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情.应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的.在通常的情况下, ...
- 018.Zabbix维护时间和模板导入
一 维护时间 在某些正常业务维护期间,不需要进行告警,可添加维护时间. 二 维护时间添加 2.1 维护 参数 描述 Name 维护名称 Maintenance type 两种维护类型可选: With ...
- 一个ScheduledExecutorService启动的Java线程无故挂掉引发的思考
2018年12月12日18:44:53 一个ScheduledExecutorService启动的Java线程无故挂掉引发的思考 案件现场 不久前,在开发改造公司一个端到端监控日志系统的时候,出现了一 ...
- loj2048 「HNOI2016」最小公倍数
link 题意: 给定一张$N$个顶点$M$条边的无向图(顶点编号为$1,2,...,n$),每条边上带有权值.所有权值都可以分解成$2^a \cdot 3^b$的形式. 现在有$q$个询问,每次询问 ...