美文网首页
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