CanvasContext2D drawImage() 문제: 이미지 로드 및 CORS
dataURL을 얻기 전에 캔버스에 이미지를 그리려고 하면 빈 dataURL 또는 빈 캔버스 렌더링이 문제가 될 수 있습니다. 이는 타이밍 문제 및 CORS(Cross-Origin Resource Sharing) 문제로 인해 발생할 수 있습니다.
타이밍 문제를 해결하려면 캔버스에 이미지를 그리기 전에 이미지가 완전히 로드되어야 합니다. 다음과 같이 onload 이벤트 핸들러를 활용하세요.
// Create a new image var img = new Image(); // Define a function to execute when the image loads img.onload = function () { var canvas = document.createElement('canvas'); canvas.width = img.width; canvas.height = img.height; var context = canvas.getContext('2d'); context.drawImage(img, 0, 0); var dataURL = canvas.toDataURL(); // Now, the dataURL is available for processing doSomething(dataURL); }; // Set the image source img.src = "http://somerandomWebsite/picture.png";
또한 캔버스 컨텍스트에서 context.toDataURL() 및 context.getImageData()의 기능을 보장하려면 CORS 호환 방식으로 이미지를 획득해야 합니다. 캔버스 "오염"을 방지합니다.
CORS 헤더가 서버에 의해 생성됩니다. cross-origin 속성은 이미지 데이터 검색에 CORS가 필요하다는 사실만 서버에 알립니다. 서버가 적절하게 구성되지 않은 경우 CORS 제한을 우회할 수 없습니다.
어떤 경우에는 서버 및 CORS 호환 서버를 포함한 다른 소스에서 이미지가 제공될 수 있습니다. 이러한 상황에서는 CORS를 지원하지 않는 서버에서 cross-origin 속성이 "anonymous"로 설정된 경우 트리거되는 onerror 이벤트 핸들러를 활용하세요.
function corsError() { this.crossOrigin = ''; this.src = ''; this.removeEventListener('error', corsError, false); } img.addEventListener('error', corsError, false);
위 내용은 CanvasContext2D drawImage()가 실패하는 이유는 무엇이며 CORS 및 이미지 로딩 문제를 해결하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!