2017-10-04 1 views
3

나는 Konva.js 프레임 워크를 사용하고 다른 마스크 위에 이미지 마스크를 적용하려고합니다. 코드가 post에서 완전히 복사됩니다. 이 jsfiddle example에는 배경 (Rect)을 추가하기위한 약간의 수정이 있습니다.KonvaJS에서 globalcompositeOperation과 함께 이미지 마스크를 사용 하시겠습니까?

배경이 올바르게 그려지지 않는 것이 문제입니다. 코드에서 실제 작동 상태를 보려면 주석 처리/주석 해제 (문제의 실제 상황을 파악하기 위해) 행이 있습니다. 누군가이 아이디어를 얻을 수 있습니까?

최저

문제는 당신에게 필요하다는
let stage = new Konva.Stage({ 
    container: 'container', 
    width: window.innerWidth, 
    height: window.innerHeight 
}); 

let layer = new Konva.Layer(); 
let rect = new Konva.Rect({ 
    x: 0, 
    y: 0, 
    width: 900, 
    height: 900, 
    draggable: true, 
    fill: '#ff8619', 
}); 

// ------------------------------------- 
// Line to comment or uncomment 
//layer.add(rect); 
// ------------------------------------- 

stage.add(layer); 

let mask = new Image(); 
mask.onload =() => { 
    let img = new Image(); 
    img.onload =() => { 
     let image = new Konva.Shape({ 
      sceneFunc: (ctx) => { 
       ctx.save(); 
       ctx.drawImage(mask, -image.x(), -image.y(), 200, 200); 
       ctx.globalCompositeOperation = 'source-in'; 
       ctx.drawImage(img, 0, 0, 200, 200); 
       ctx.globalCompositeOperation = 'source-over'; 
       ctx.restore(); 
      }, 
      // (!) important 
      // for this case you need to define custom hit function 
      hitFunc: (ctx) => { 
       ctx.rect(0, 0, 200, 200); 
       ctx.fillStrokeShape(image); 
      }, 
      draggable: true 
     }); 
     layer.add(image); 
     layer.draw(); 
    }; 
      img.src = "http://i.imgur.com/kKjW3U4.png"; 

}; 
     mask.src = "http://i.imgur.com/fQX2P8S.png"; 
+0

그는 Konva.js 채팅하고 당신의 바이올린을 보았다. 당신이 원하는 것은 실제로 명백 할 수 있습니다. 그러나 나는 주석 달린 줄이있는 &없이 당신의 바이올린을 보았지만 실제로 달성하고 싶은 것을 이해하지 못합니다. 어쩌면 그림 모형을 제공 할 수 있을까요? –

+0

관심을 가져 주셔서 감사합니다. 코드의 주석을 제거하면 그 결과는 [image1] (https://snag.gy/wlR3sO.jpg)처럼 보일 것이라고 생각했습니다. 그러나 이것은 사실이 아닙니다. globalCompositeOperation은 백그라운드에서 주황색 Rect에도 적용되는 것처럼 보입니다. 희망을 충분히 명확하게 정복 당했다. – user8716023

+0

질문에 직접 이미지를 삽입 할 수 있다는 것을 알고 계셨습니까? 질문을 편집 할 때 도구 모음을보십시오. 그 이미지를 보면 나는 동물 모양의 클리핑 패스가있는 오렌지 채워진 전경 선을 보았고 클리핑 영역에서는 다른 이미지를 보았습니다. @lavrton에 링크 된 다른 질문에 대한 답은 잠재적 인 해결책을 보여주는 3 개의 링크를 제공했습니다. –

답변

0

: let layer2 = new Konva.Layer();
2. 올바른 순서로 무대에 추가 : stage.add(layer2, layer);



1. 새 레이어를 추가 업데이트 된 내용은 다음과 같습니다.
jsfiddle example

+0

안녕하세요, 귀하의 답변에 감사드립니다. 하지만 같은 캔버스에서 조작하고 싶습니다. 따라서 두 번째 레이어를 사용하고 싶지 않습니다. – user8716023

관련 문제