> 웹 프론트엔드 > JS 튜토리얼 > 내 캔버스 `drawImage()`가 빈 데이터를 반환하거나 렌더링에 실패하는 이유는 무엇이며 `onload` 및 CORS를 사용하여 문제를 해결하려면 어떻게 해야 합니까?

내 캔버스 `drawImage()`가 빈 데이터를 반환하거나 렌더링에 실패하는 이유는 무엇이며 `onload` 및 CORS를 사용하여 문제를 해결하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2024-12-12 21:03:13
원래의
980명이 탐색했습니다.

Why is my Canvas `drawImage()` returning empty data or failing to render, and how can I fix it using `onload` and CORS?

CanvasContext2D drawImage() 수수께끼: 온로드 및 CORS

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";
로그인 후 복사

CORS 및 데이터 검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿