HTML5画布;图像剪裁和多个图像

时间:2015-07-22 17:01:39

标签: javascript html html5 canvas

我对画布很新,我遇到了一些问题。

我正在努力实现一个目标:在一个画布中显示两个图像;一个图像是背景,另一个图像被剪切为PNG并显示在顶部。

我已经到了那里,但是我已经撞墙了,我不知道如何克服它。

我在http://jsfiddle.net/jhp79yg9/

为它创建了一个jsFiddle

      function loadImages(sources, callback) {
        var images = {};
        var loadedImages = 0;
        var numImages = 0;
        // get num of sources
        for(var src in sources) {
          numImages++;
        }
        for(var src in sources) {
          images[src] = new Image();
          images[src].onload = function() {
            if(++loadedImages >= numImages) {
              callback(images);
            }
          };
          images[src].src = sources[src];
        }
      }
      var canvas = document.getElementById('canvas');
      var context = canvas.getContext('2d');

      var sources = {
        img1: 'https://scontent-iad3-1.cdninstagram.com/hphotos-xaf1/t51.2885-15/11351598_1454928098145798_1274636321_n.jpg',
        img2: 'https://igcdn-photos-c-a.akamaihd.net/hphotos-ak-xaf1/t51.2885-15/11379733_1139595366067106_273993739_n.jpg',
        mask: 'http://img12.deviantart.net/65e4/i/2013/003/6/6/png_floating_terrain_by_moonglowlilly-d5qb58m.png'
      };

      loadImages(sources, function(images) {
        context.drawImage(images.img2, 0, 0, 240, 240);
        
        context.drawImage(images.mask, 20, 95, 500, 349);
        context.globalCompositeOperation = 'source-in';
        context.drawImage(images.img1, 0, 0, 540, 540);

      });
<canvas id="canvas" width="540" height="540"></canvas>

在这个例子中,我已经将第一张图像的尺寸从540x540减小到了140x140,这样我就可以判断它是否正在搞乱,就是这样。

发生的事情是它没有显示第二张图片,它显示'img1'变量两次,而不是显示'img2'。

有人可以提供任何帮助吗?

我也说不出来,因为它渲染了相同的图像,它位于前景中,位于后台。也可以在那里帮助(剪裁的图像应该在前景中)。

谢谢!

2 个答案:

答案 0 :(得分:4)

另一种方法是从当前内容中删除掩码,然后在当前内容后面绘制背景:

CastToMyType(instanceOfNeededType, givenObject)

http://jsfiddle.net/jhp79yg9/6/

答案 1 :(得分:2)

我无法清楚地了解你的要求是什么,但做出一些假设,我希望这会给你所需要的东西

context.drawImage(images.img2, 100, 180, 350, 350);
context.globalCompositeOperation = 'destination-atop';
context.drawImage(images.mask, 100, 180, 350, 350);
context.drawImage(images.img1, 0, 0, 540, 540);

http://jsfiddle.net/jhp79yg9/5/