如何在布料js中选择裁剪后的图像

时间:2015-12-16 07:49:00

标签: html5 html5-canvas fabricjs

<html>
<head>
    <style type="text/css">
        canvas{
            border:1px solid #ccc;
        }

        .canvas-container{
            float: left;
            left: 20px; 
        }
    </style>
</head>
<body>
<canvas id='canvas' width='500' height='600' ></canvas>
<canvas id='C2' width='500' height='600'></canvas>
<script type="text/javascript" src="fabric.js"></script>
<script>
    (function() {
      var canvas = this.__canvas = new fabric.Canvas('canvas');
      fabric.Object.prototype.transparentCorners = false;

      var radius = 300;

      fabric.Image.fromURL('./images/Chrysanthemum.jpg', function(img) {
        img.scale(0.4).set({
          left: 10,
          top: 100,
          angle: 0,
          clipTo: function (ctx) {
            ctx.rect(-250, -250, 400, 400);
          }
        });
        canvas.add(img).setActiveObject(img);
        console.log(canvas.getActiveObject());
      });
    })();
</script>
</body>


----------


</html>

//上面的代码;

现在活动对象大小与尚未裁剪的图像相同; 但是,如果有任何方法可以选择裁剪的图像。可以选择尺寸较小的较小尺寸。 THX!

1 个答案:

答案 0 :(得分:2)

剪辑不适用于该效果: 如果你想要一些更好的裁剪,如果你的裁剪不同于preserverveAspectRatio允许你的属性那么你可以使用模式技巧。 (基本上在中心裁剪,裁剪左裁剪,对于x轴和y轴都是如此)。

当你看到而不是图像我创建一个具有所需尺寸的矩形,然后我使用img加载来创建一个将填充矩形的模式。 然后,您可以在模式上使用offsetX和offsetY来修改可见的图像部分。

可以获得补偿:

rect.fill.offsetX
rect.fill.offsetY

    (function() {
      var canvas = this.__canvas = new fabric.Canvas('canvas');
      fabric.Object.prototype.transparentCorners = false;

      var radius = 300;

      fabric.Image.fromURL('http://fabricjs.com/assets/pug.jpg', function(img) {
        var rect = new fabric.Rect({width: 400, height: 400});
        var pattern = new fabric.Pattern({source: img.getElement(), offsetX: -20, offsetY: -50});
        rect.scale(0.4).set({
          left: 10,
          top: 100,
          angle: 0,
          fill: pattern,
        });
        canvas.add(rect).setActiveObject(rect);
      });
    })();
canvas{
  border:1px solid #ccc;
}

.canvas-container{
  float: left;
  left: 20px; 
}
<canvas id='canvas' width='500' height='600' ></canvas>
<canvas id='C2' width='500' height='600'></canvas>
<script type="text/javascript" src="http://fabricjs.com/lib/fabric.js"></script>