2017-03-01 1 views
0

Fabric.js로 작업하고 있지만 이해할 수없는 문제가 하나 있습니다.setBackground Fabric.js : CORS 문제

Fabric.js 캔버스의 배경을 설정하고 싶지만 CORS 문제가 발생합니다. 내가 고르

var canvas = window._canvas = new fabric.Canvas('presenterCanvas'); 
canvas.isDrawingMode = true; 

src = "http://itknowledgeexchange.techtarget.com/overheard/files/2016/12/water-molecule.png"; 

canvas.setBackgroundImage(src, canvas.renderAll.bind(canvas), { 
    crossOrigin: 'anonymous', 
    width: canvas.width, 
    height: canvas.height, 
    originX: 'left', 
    originY: 'top' 
}); 

를 사용하여 배경을 설정하는 방법에 대해 읽고 나는이 오류를 얻을 : 당신은 jsfiddle에 코드를 확인할 수 있습니다 enter image description here

을 : http://jsfiddle.net/wikett/uvk8xsjf/

나는 왜 내가 할 수있는 이해하지 않는다 html로 이미지를 사용하고 캔버스에 패브릭 이미지를 추가 할 수는 있지만 배경을 설정할 수는 없습니다. 누구든지이 문제를 해결할 수 있습니까?

덕분 미리

+0

'나는이 오류가 :'- 빈 페이지? ** 편집 ** - 어쨌든, CORS는 사람들이 당신이 사용하기를 원하지 않는 다른 사람들의 자원을 사용하는 것을 제한합니다 ... 이미지를 표시하는 것이 캔버스에서 사용하는 것입니다 또 다른 것 같아요. –

답변

1

문제는 입니다.은 crossOrigin 속성을 사용하여 이미지를로드하도록 요청합니다.

미디어 요소의 crossOrigin 특성을 설정하면 해당 요청을 받아들이도록 서버를 올바르게 설정해야합니다. 그렇지 않으면, 귀하의 경우와 마찬가지로 단지 잘못 될 것입니다.

나중에 내보내거나 일부 패브릭의 필터를 적용하지 않으려면 그렇게 할 필요가 없습니다.

canvas.setBackgroundImage(src, canvas.renderAll.bind(canvas), { 
// crossOrigin: 'anonymous',// Here is your problem 
    width: canvas.width, 
    height: canvas.height, 
    originX: 'left', 
    originY: 'top' 
}); 

updated fiddle

+0

감사합니다. @ 카이도하지만 지금 canvas.toDataURL()을 사용하여 PNG로 캔버스를 내보내려고하면 어떻게됩니까? 이 오류가 발생합니다. Uncaught DOMException : 'toDataURL'을 (를) 'HTMLCanvasElement'에서 실행하지 못했습니다. 오염 된 캔버스를 내보낼 수 없습니다. 여기에서 확인할 수 있습니다. http://jsfiddle.net/wikett/uvk8xsjf/5/ 어떻게 해결할 수 있습니까? 감사합니다. –

+0

@EnriqueAparicio, 네, 그게 내가 나중에 * 내보낼 것을 원하지 않는다면 의미 한 것입니다. 실제로 원하는 경우 이미지를 올바르게 호스팅하는 서버를 설정하여 crossOrigin 요청을 할 때 정확한 Allow-Control-Allow-Request : * 헤더를 반환하거나 [proxy] (http : //crossorigin.me/)은 두 가지 해결책을'crossOrigin : 'anonymous'' 옵션으로 적절하게 설정하거나 자신의 도메인에 이미지를 호스팅합니다. – Kaiido

1

는 화상을 표시 에는 제한이 없지만, 자바 스크립트 (화소 값 포함) 데이터 액세스에 제한이있다.

패브릭의 배경 이미지 코드는 픽셀 데이터를 읽습니다 (아마도 스케일링과 같은 조작을 할 수 있으므로). 이미지가 다른 원점에서 나온 경우 CORS를 통해 권한이 필요합니다.