前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Canvas之使用图片 原

Canvas之使用图片 原

作者头像
tianyawhl
发布2019-04-04 09:36:05
1K0
发布2019-04-04 09:36:05
举报
文章被收录于专栏:前端之攻略前端之攻略

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

引用图像到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里的起始坐标

代码语言:javascript
复制
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画入时应该缩放的大小

代码语言:javascript
复制
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个参数参照下图

代码语言:javascript
复制
<body>
    <img src="images/test.jpg" alt="" style="display:none" id="source">
    <img src="images/testframe.png" alt="" style="display:none" id="frame">
    <canvas id="canvas" width="600" height="400" style="background:pink;"></canvas>
    <script>
    function draw() {
        var canvas = document.getElementById("canvas");
        var ctx = canvas.getContext("2d");
        ctx.drawImage(document.getElementById("source"), 80, 80, 240, 240, 22, 21, 240, 240);
        ctx.drawImage(document.getElementById("frame"), 0, 0);
    }
    draw()
    </script>
</body>

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

createPattern(image, type)

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

代码语言:javascript
复制
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()

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/12/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档