>웹 프론트엔드 >JS 튜토리얼 >내 Canvas drawImage()가 이미지를 렌더링하지 못하는 이유는 무엇이며 온로드 및 CORS 문제를 해결하려면 어떻게 해야 합니까?

내 Canvas drawImage()가 이미지를 렌더링하지 못하는 이유는 무엇이며 온로드 및 CORS 문제를 해결하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-13 18:19:13185검색

Why is my Canvas drawImage() failing to render images, and how can I resolve onload and CORS issues?

CanvasContext2D drawImage() 수수께끼: 온로드 및 CORS 장애물 해결

문제 제시:

캔버스 페인팅의 무모한 시작 , 당신은 당황스러운 수수께끼에 직면하게 됩니다. drawImage()를 통해 렌더링된 이미지는 파악하기 어렵고 빈 데이터 URL이 남습니다. 더욱이 캔버스를 표시하려고 시도해도 눈에 띄는 결과가 나오지 않으며 콘솔은 무시무시하게 조용합니다.

당황의 폭로:

문제의 핵심은 시기상조에 있습니다. 캔버스 예술성의 본질. drawImage()가 마법을 휘두르려면 먼저 이미지 로드 프로세스를 완료해야 합니다. 이러한 onLoad 필요성을 달래려면 다음 전략을 수용하십시오.

// Create the image
var img = new Image();

// Define the onload function
img.onload = function() {
  // Canvas setup
  var canvas = document.createElement("canvas");
  canvas.width = img.width;
  canvas.height = img.height;
  var context = canvas.getContext("2d");

  // Draw the image
  context.drawImage(img, 0, 0);

  // Obtain the data URL
  var dataURL = canvas.toDataURL();

  // Perform desired actions with dataURL
  doSomething(dataURL);
};

// Set the image source
img.src = "http://somerandomWebsite/picture.png";

CORS 수수께끼 및 완화:

원활한 toDataURL() 및 getImageData() 실행을 보장하려면 CORS(교차 원본 리소스 공유)가 필수적입니다. 다음 시나리오 중 하나를 보장하여 캔버스 '오염'을 방지합니다.

  • 동일 서버 이미지 출처.
  • 허용된 CORS 헤더와 img.crossOrigin이 "use-credentials"로 설정된 외부 서버 ".
  • img.crossOrigin이 다음으로 설정된 익명 CORS 서버 "anonymous".

중요 사항:

  • CORS 헤더는 서버에서 발생하며 교차 출처 속성은 단지 CORS 사용을 요청합니다.
  • IE와 Safari는 교차 출처에 대한 지원이 부족합니다. 속성.

특이한 경우: 이미지 소스의 불일치:

이미지가 동일한 서버와 CORS 호환 소스의 혼합에서 나온 경우 활용을 고려하세요. onerror 이벤트 핸들러. CORS가 아닌 서버에 교차 출처를 '익명'으로 할당하고 오류를 수신합니다.

function corsError() {
  this.crossOrigin = "";
  this.src = "";
  this.removeEventListener("error", corsError, false);
}
img.addEventListener("error", corsError, false);

위 내용은 내 Canvas drawImage()가 이미지를 렌더링하지 못하는 이유는 무엇이며 온로드 및 CORS 문제를 해결하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.