dataURL을 검색하기 전에 캔버스에 이미지를 그리려고 하면 사용자가 반환되는 문제에 직면할 수 있습니다 데이터는 "A" 문자로 채워진 문자열과 비슷하게 비어 있는 것처럼 보입니다. 또한 문서에 캔버스를 추가하면 이미지 렌더링에 실패할 수 있지만 콘솔에는 오류가 보고되지 않습니다.
문제의 근본 원인은 이미지의 비동기 특성에 있습니다. 로딩. 이 문제를 해결하려면 요소는 이미지 로드가 완료된 후에만 그리기 작업을 실행합니다.
// Create a new image var img = new Image(); // Define a function to execute after the image has loaded 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); // Now you can retrieve the dataURL var dataURL = canvas.toDataURL(); doSomething(dataURL); }; // Set the image source img.src = "http://somerandomWebsite/picture.png";
context.toDataURL() 및 context.getImageData 메서드가 제대로 작동하려면 이미지 리소스는 교차 출처 호환 방식으로 검색되어야 합니다. 그렇지 않으면 캔버스가 "오염"되어 픽셀 데이터를 검색하려는 모든 시도가 차단됩니다.
이미지가 스크립트와 동일한 서버에서 생성된 경우에는 문제가 없습니다. 그러나 이미지가 외부 서버에 있는 경우 적절한 CORS 헤더를 설정하여 서버가 원본 간 액세스를 허용하는지 확인하는 것이 중요합니다. 또한 img.crossOrigin 속성은 인증된 요청의 경우 "use-credentials"로 설정하고 익명 요청의 경우 "anonymous"로 설정해야 합니다.
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);
위 내용은 내 캔버스 `drawImage()`가 빈 데이터를 반환하거나 렌더링에 실패하는 이유는 무엇이며 `onload` 및 CORS를 사용하여 문제를 해결하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!