2017-06-25 4 views
1

なぜこのclipToメソッドは、オブジェクトコンテナとその内部のイメージのサイズを変更できる最新のfabricjsバージョンでは機能しません。また、コンテナオブジェクトとイメージオブジェクトを移動することができます。FabricJSイメージオブジェクトclipToシェイプオブジェクトの問題

var imgInstance = new fabric.Image(img, { 
       width: instanceWidth, 
       height: instanceHeight, 
       top: (canvas.getHeight()/2 - instanceHeight/2), 
       left: (canvas.getWidth()/2 - instanceWidth/2), 
       originX: 'left', 
       originY: 'top' 
      }); 
      canvas.add(imgInstance); 
      imgInstance.clipTo = function(ctx) { 
       /* image clipping method doesn't work on latest fabricjs version*/ 
       ctx.save(); 
       ctx.setTransform(1, 0, 0, 1, 0, 0); 

       clippingRect.render(ctx); 

       ctx.restore(); 
      }; 

http://jsfiddle.net/efmbrm4v/2/

または内部それらの別のアプローチ形状オブジェクトがイメージオブジェクトです。

+0

うん、私は最新fabricjsバージョンでその機能のように持っていると思います。 – Marvz73

+0

なぜ、そのコードが最新のバージョンで動作しないのか@ℊααnd – Marvz73

答えて

1

FabricJSの最新バージョンにはいくつかのキャッシングの問題があります。これを回避するには、矩形オブジェクトに対してobjectCachingプロパティをfalseに設定する必要があります。

$(document).ready(function() { 
 
    var imageLoader = document.getElementById('imageLoader'); 
 
    imageLoader.addEventListener('change', handleImage, false); 
 
}); 
 

 
var canvas = new fabric.Canvas('myCanvas'); 
 

 
var clippingRect = new fabric.Rect({ 
 
    left: 100, 
 
    top: 100, 
 
    width: 100, 
 
    height: 100, 
 
    fill: 'transparent', 
 
    opacity: 1, 
 
    objectCaching: false //<-- set this 
 
}); 
 
canvas.add(clippingRect); 
 

 
function handleImage(e) { 
 
    var reader = new FileReader(); 
 
    reader.onload = function(event) { 
 
     var img = new Image(); 
 
     img.onload = function() { 
 

 
     var instanceWidth, instanceHeight; 
 

 
     instanceWidth = img.width; 
 
     instanceHeight = img.height; 
 

 
     var imgInstance = new fabric.Image(img, { 
 
      width: instanceWidth, 
 
      height: instanceHeight, 
 
      top: (canvas.getHeight()/2 - instanceHeight/2), 
 
      left: (canvas.getWidth()/2 - instanceWidth/2), 
 
      originX: 'left', 
 
      originY: 'top' 
 
     }); 
 
     canvas.add(imgInstance); 
 
     imgInstance.clipTo = function(ctx) { 
 
      ctx.save(); 
 
      ctx.setTransform(1, 0, 0, 1, 0, 0); 
 

 
      clippingRect.render(ctx); 
 

 
      ctx.restore(); 
 
     }; 
 
     canvas.renderAll(); 
 
     }; 
 
     img.src = event.target.result; 
 
    }; 
 
    reader.readAsDataURL(e.target.files[0]); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.13/fabric.min.js"></script> 
 
<canvas id="myCanvas" width="400" height="300" style="border: 1px solid black"></canvas> 
 
<br /> 
 
<label>Choose a File:</label> 
 
<br/> 
 
<br /> 
 
<input type="file" id="imageLoader" name="imageLoader" /> 
 
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>

+0

うわー、私はすでにそのオブジェクトキャッシュを試していますが、私はそれを間違ったオブジェクトに置きます。 – Marvz73

+0

キャンバスをJSONに保存しようとしたときに再びキャンバスを読み込むと、clippingRect.render(ctx);というエラーが表示されます。定義されていません。何かお考えですか? – Marvz73

+0

um ..そこに問題があるようだが、解決策を見つけることができない。 –

関連する問題