2017-02-21 1 views
0

이미지를로드 한 후 FabricJS를 사용하여 캔버스에 이미지가 있습니다. 이미지를로드 한 후 canvas.centerObject (img)를 호출합니다. 나는 같은 이미지를 2 배로 배율을 변경했는데, Magnify Glass 기능을 작동 시키려하고 있습니다. 이미지를 가운데에 정렬하지 않고도 모든 것이 잘 작동하지만, canvas.centerObject (img)를 호출하자마자 더 큰 이미지가 rigth 위치에 표시되지 않습니다.패브릭 js 캔버스를 사용하여 가운데 객체 뒤 위치가 잘못됨

fabric.Image.fromURL('http://fabricjs.com/assets/pug_small.jpg', function (img) { 
     img1 = img; 
    img.set({ 
     width: originalWidth, 
     height: originalHeight, 
     evented: true, 
     selectable: false 
    }); 

    lens = fabric.util.object.clone(img); 
    lens.set({ 
     width: scale * originalWidth, 
     height: scale * originalHeight, 
     clipTo: function (ctx) { 
      ctx.arc(-this.left + x - this.width/2, -this.top + y - this.height/2, radius, 0, Math.PI * 2, true); 
     } 
    }); 

    canvas.add(img, lens); 
    canvas.centerObject(img);//*******issue here**** 
}); 

canvas.on('mouse:move', function (e) { 
    x = e.e.layerX; 
    y = e.e.layerY; 
    lens.set('left', -(scale - 1) * x); 
    lens.set('top', -(scale - 1) * y); 
    canvas.renderAll(); 
}); 

Please check on this fiddle

감사합니다.

답변

0

큰 이미지를 다시 정렬하여 canvas.centerObject(img)으로 전화하면 올바르게 표시됩니다. 그러나 구현 요구 사항에 따라 개체 디자인, 즉 scale()을 통합하기 위해 디자인을 조금 재고 할 수 있습니다. (스케일 - lens.set ('왼쪽'- :

https://jsfiddle.net/rekrah/rfdxff5h/

fabric.Image.fromURL('http://fabricjs.com/assets/pug_small.jpg', function(img) { 
    img1 = img; 
    img.set({ 
     width: originalWidth, 
     height: originalHeight, 
     evented: true, 
     selectable: false 
    }); 

    lens = fabric.util.object.clone(img); 
    lens.set({ 
     top: -225, 
     left: 150, 
     width: scale * originalWidth, 
     height: scale * originalHeight, 
     clipTo: function(ctx) { 
     ctx.arc(-this.left + x - this.width/2, -this.top + y - this.height/2, radius, 0, Math.PI * 2, true); 
     } 
    }); 

    canvas.add(img, lens); 
    canvas.centerObject(img);//******* issue no longer here**** 
    }); 

    canvas.on('mouse:move', function(e) { 
    x = e.e.layerX; 
    y = e.e.layerY; 
    if (x > 150 && x < 750) { 
     lens.set('left', -(scale - 1) * x + 300); 
     lens.set('top', -(scale - 1) * y); 
    } 
    canvas.renderAll(); 
    }); 
+0

내가 이해한다면,이 솔루션은 코드 줄을 기반으로합니다

여기에 업데이트 된 JSFiddle과 불통 코드입니다 1) * x + 300). 그래서 기본적으로 큰 이미지의 왼쪽에 300을 추가하여 작은 이미지에서 centerObject를 얻습니다. 이 값을 동적으로 계산하여 (300) 이미지의 모든 크기에서 작동하도록하려면 어떻게해야합니까? – Arnel

+0

이미지의 너비는 절반이지만 이미지 크기의 1/4은 렌즈의 왼쪽 속성에 사용해야합니다 ...하지만 캔버스 크기에 따라 다릅니다. –

+0

@Arnel이 질문에 대한 답변을 얻었습니까? 대답으로 표기 하시겠습니까? 구현할 때 다른 질문이 있으면 알려주십시오. 더 도와 줘서 기뻐. –

관련 문제