美文网首页
20.图案样式 Patterns

20.图案样式 Patterns

作者: 如果俞天阳会飞 | 来源:发表于2019-07-18 20:01 被阅读0次

    1.图案样式pattern

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

    注意: 用 canvas 对象作为 Image 参数在 Firefox 1.5 (Gecko 1.8) 中是无效的。
    图案的应用跟渐变很类似的,创建出一个 pattern 之后,赋给 fillStyle 或 strokeStyle 属性即可。

    var img = new Image();
    img.src = 'someimage.png';
    var ptrn = ctx.createPattern(img,'repeat');
    

    注意:与 drawImage 有点不同,你需要确认 image 对象已经装载完毕,否则图案可能效果不对的。

    function draw() {
      var ctx = document.getElementById('canvas').getContext('2d');
    
      // 创建新 image 对象,用作图案
      var img = new Image();
      img.src = 'https://mdn.mozillademos.org/files/222/Canvas_createpattern.png';
      img.onload = function() {
    
        // 创建图案
        var ptrn = ctx.createPattern(img, 'repeat');
        ctx.fillStyle = ptrn;
        ctx.fillRect(0, 0, 150, 150);
    
      }
    }
    

    创建一个canvas元素来

    createPattern() 缺点
    有的时候,我们在用createPattern() 方法在canvas里面填充图形的时候,canvas路径的大小,可能会和图片的大小不一样的情况,有的时候我们想要的效果是图片完全填充:

    针对这个问题,可以创建一个临时的canvas,用canvas 的drawImg()方法,对图片进行缩放,然后在再吧canvas 传到createPattern里面。以此达到createPattern缩放的效果。

    <canvas id="canvas" width="600" height="600" style="background-color: #7e8c8d"></canvas>
    <script>
      var context = document.querySelector('#canvas').getContext('2d');
      context.rect(0,0,400,400);
      context.strokeStyle = "#000";
      context.stroke();
      var temp = document.createElement('canvas');
      var contextTemp = temp.getContext('2d');
      contextTemp.width = 150;
      contextTemp.height = 200;
      var img = new Image();
      img.src = './1.jpg';
      img.onload = function() {
        contextTemp.drawImage(this,0,0,150,200);
        var pattern = context.createPattern(temp,'no-repeat');
        context.fillStyle = pattern;
        context.fill();
      }
    </script>
    

    相关文章

      网友评论

          本文标题:20.图案样式 Patterns

          本文链接:https://www.haomeiwen.com/subject/cppllctx.html