博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Canvas之使用图片
阅读量:5772 次
发布时间:2019-06-18

本文共 2152 字,大约阅读时间需要 7 分钟。

hot3.png

canvas有比较强的图片操作能力。可以用于动态的图像合成或者作为图形的背景。浏览器支持任意格式如PNG、GIF、或者JPEG,你甚至可以将同一个页面中的其他canvas元素生成的图片作为图片源(toDataURL("image/png"),)

引用图像到canvas基本的2步

(1)获取或者创建一个图片对象或者另一个canvas的元素的引用作为源,也可以通过提供一个URL的方式来使用图片

(2)使用drawImage()函数将图片绘制到画布上

创建图像

var img = new Image();

img.src = "myImage.png";
drawImage();

 当脚本执行后,图片开始装载,若调用drawImage时,图片没有装载完,那什么都不会发生(有些旧的浏览器可能会抛出异常),因此应该用load事件来保证不会在加载完毕之前使用这个图片,上面的代码改成

var img = new Image();   // 创建img元素

img.onload = function(){
  // 执行drawImage语句
}
img.src = 'myImage.png'; // 设置图片源地址

除了设置图片源地址还可以使用Base64编码的字符串的格式来定义一个图片

img.src = 'data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAA 

其优点是图片内容即时可用 ,无需再到服务器兜一圈,缺点是图像没法缓存,图片大的话内嵌的url数据会相当的长

 

在画布上绘制图片

一旦获得了源图对象,我们就可以使用drawImage方法将它渲染到canvas里。drawImage方法有3种状态,下面是最基础的一种

drawImage(image,x,y)    //x和y是其在目标canvas里的起始坐标

function draw() {    var ctx = document.getElementById('canvas').getContext('2d');    var img = new Image();    img.onload = function(){      ctx.drawImage(img,0,0);      ctx.beginPath();      ctx.moveTo(30,96);      ctx.lineTo(70,66);      ctx.lineTo(103,76);      ctx.lineTo(170,15);      ctx.stroke();    }    img.src = 'images/backdrop.png';  }

第二种是可以缩放

drawImage(image, x, y, width, height)     //增加的width和height是用来控制当向canvas画入时应该缩放的大小

function draw(){  var ctx = document.getElementById("canvas").getContext("2d");  var img = new Image();  img.onload = function(){    for(var i =0;i<4;i++){        for(var j =0;j<5;j++){          ctx.drawImage(img,j*100,i*100,100,100)        }    }  }  img.src = "images/avatar.png"}

 第三种是比较复杂的切片Slicing

drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)

第一个参数是跟其他2个是一样的,后面的8个参数参照下图

            

 最后还有一种比较简单的将图片绘制到canvas的方法 图案样式 Patterns

createPattern(image, type)

该方法接受两个参数。Image 可以是一个 Image 对象的引用,或者另一个 canvas 对象。Type 必须是下面的字符串值之一:repeat,repeat-x,repeat-y 和 no-repeat。

function draw(){  var ctx = document.getElementById("canvas").getContext("2d");  var image = new Image();  image.src = "images/avatar.png";  image.onload = function(){    var pattern = ctx.createPattern(image,"no-repeat");	ctx.fillStyle = pattern;	ctx.fillRect(0,0,600,300)  }}draw()

 

转载于:https://my.oschina.net/u/2612473/blog/2987922

你可能感兴趣的文章
Facebook Sonar:一款可视化及交互式移动应用调试工具
查看>>
基于干净语言和好奇心的敏捷指导
查看>>
Node.js 2017企业用户调查结果发布
查看>>
“软”苹果水逆的一周:杂志服务崩溃,新机型遭泄露,芯片首架离职
查看>>
JAVA的优势就是劣势啊!
查看>>
IEEE802.11数据帧在Linux上的抓取
查看>>
使用if语句编写Shell脚本
查看>>
ELK实战之logstash部署及基本语法
查看>>
帧中继环境下ospf的使用(点到点模式)
查看>>
BeanShell变量和方法的作用域
查看>>
LINUX下防恶意扫描软件PortSentry
查看>>
由数据库对sql的执行说JDBC的Statement和PreparedStatement
查看>>
springmvc+swagger2
查看>>
软件评测-信息安全-应用安全-资源控制-用户登录限制(上)
查看>>
cacti集成
查看>>
linux后台运行&符号、nohup命令、输出重定向等使用方法
查看>>
Android中的Cursor
查看>>
我的友情链接
查看>>
打造一台称手的工作站-配置Ubuntu
查看>>
Java Web Application 自架构 一 注解化配置
查看>>