이미지에 대한 참조를 drawImage
API 인 canvas
으로 전달했지만 이미지가 계속로드되는 경우 어떻게됩니까? 예외가 발생하거나 API가 부분 데이터로 진행하거나 API가 이미지가로드 될 때까지 차단됩니다.아직 완전히로드되지 않은 이미지에 drawImage()를 사용하면 어떻게됩니까?
답변
canvas spec은 99 %가로드 되더라도 아무 것도 그려지지 않을 것이라고 지시합니다. 오류가 발생하지 않습니다.
당신이 그렇다면 : 이미지가 그려 얻을 것이라는 점을 보장하기 위해
var img = new Image();
img.onload = function() {
// Will occur only once the image is done loading
ctx.drawImage(img, 0, 0);
}
img.src = 'http://placekitten.com/300/300';
: 대부분의 사람들이 비슷한을 할 이유
var img = new Image();
img.src = 'http://placekitten.com/300/300';
// Might occur before the image is done loading (bad!)
ctx.drawImage(img, 0, 0);
이입니다.
나는 한 번 이것에 비틀 거렸다; 문제는 내가 img.onload
을 사용하지 않아서 그려진 것을 보지 못했다는 것입니다.
http://jsfiddle.net/pimvdb/eGjak/100/으로 확인할 수 있습니다. 캐시는 처음에는 표시되지 않지만 캐시 때문에 다시로드됩니다.
가장 좋은 방법은 항상 onload
을 사용하는 것입니다.
API는 캔버스에 아무 것도 그리지 않습니다. 캔버스에 포함 된 이미지로 다시 그리는 루프를 사용하지 않는 한 사용자는 이미지를 볼 수 없습니다. 일반적인 방법은 캔버스에 이미지가있는 onload를 사용하는 것입니다. 캔버스를 지원하는 모든 브라우저는 img.onload를 지원합니다. 루프 상황에서 이미지를 즉시 추가 할 수 있지만 다운로드하지 않으면 볼 수 없다는 것을 알고있을 수 있습니다.
The spec은 아무 것도 그려지지 않는다고 말합니다.
첫 번째 인수가 img, canvas 또는 video 요소가 아닌 경우 TYPE_MISMATCH_ERR 예외가 발생합니다. 이미지에 이미지 데이터가없는 경우 INVALID_STATE_ERR 예외가 발생합니다. 소스 사각형 치수 중 하나가 0이면 INDEX_SIZE_ERR 예외가 발생합니다. 이미지가 아직 완전히 디코딩되지 않은 경우 아무 것도 그려지지 않습니다.
나는 그것을 지옥에 넣어 보았습니다. 당신은 할 수있다 see the results here.
나는 기본적으로 이미지 로딩 속도를 늦추기 위해 PHP를 사용했다.
slowimage.php
<?php
sleep(3);
header('Content-type: image/png');
echo file_get_contents('stackoverflow-logo-300.png');
?>
index.html을 설립 한 바와 같이
<canvas id="canvas" width="512" height="512">
<script>
var img = new Image();
img.onload = function() {
alert("image loaded");
};
img.src = "slowimage.php";
var ctx = document.getElementById("canvas").getContext("2d");
ctx.drawImage(img, 0, 0);
</script>
, 그리고 당신이 볼 수있는 바와 같이, 아무것도 그려지지 않습니다.
+1 데모 및 게시물의 스펙을 인용하십시오. 감사. – AppleGrew
그 대답은 나에게 20 분 걸렸다 :) –
- 1. HTML 5의 doctype을 사용하면 어떻게됩니까?
- 2. 클래스에 fwrite()를 사용하면 어떻게됩니까?
- 3. JSF EL : 예약되었지만 아직 구현되지 않은 인스턴스입니까?
- 4. 페이지가 완전히로드되지 않은 경우 웹보기를 다시로드 할 수 있습니까?
- 5. DOM이 완전히로드되지 않았습니까?
- 6. 닫히지 않은 데이터베이스 연결은 어떻게됩니까?
- 7. 내 페이지가 아직 압축되지 않은 이유는 무엇입니까?
- 8. 2.3 설치 2.2 장치에서 사용하면 어떻게됩니까
- 9. 해당하는 has_one을 지정하지 않고 belongs_to를 사용하면 어떻게됩니까?
- 10. AFTER UPDATE 트리거에서 UPDATE 문을 사용하면 어떻게됩니까?
- 11. "throw;"를 사용하면 어떻게됩니까? 던지지 않는 예외없이?
- 12. 3 대신 하나의 정규식 패턴을 사용하면 어떻게됩니까?
- 13. sqlite 명령 줄 셸에서 varchar (10)를 사용하면 실제로 어떻게됩니까?
- 14. 문서가 완전히로드되지 않는 프레임의 컨텐츠에 액세스하십시오.
- 15. 아직 생성되지 않은 목록에 추가하는 방법. 도와주세요!
- 16. 아직 저장되지 않은 레코드에 파일을 연결하는 방법
- 17. 아직 선택되지 않은 모든 라디오 그룹을 찾으십시오.
- 18. IFRAMES & SEO - (아직 처리되지 않은 시나리오)
- 19. Filemaker : 테이블에 레코드를 아직 추가하지 않은 경우
- 20. 대상이 아직 시작되지 않은 경우 Java에서 Thread.join()의 동작은 무엇입니까?
- 21. SQL을 사용하면 각 조인 유형별 효율성 순위는 어떻게됩니까
- 22. 프로그램 종료 후 해제되지 않은 메모리는 어떻게됩니까?
- 23. 커밋되지 않은 경우이 SQL의 트랜잭션은 어떻게됩니까?
- 24. 스레드가 안전하지 않은 .NET 큐 개체는 어떻게됩니까?
- 25. Application_Start에서 처리되지 않은 예외가 발생하면 어떻게됩니까?
- 26. 완료되지 않은 경우 SQL 작업은 어떻게됩니까?
- 27. CallbackOnCollectedDelegate - 디버거가 연결되지 않은 경우 어떻게됩니까?
- 28. Drupal 7을 사용하면 D6의 imagefield_extended와 비슷한 이미지에 필드를 어떻게 추가합니까?
- 29. 스칼라 액터에서 while (true) 대신 loop를 사용하면 어떻게됩니까?
- 30. 여러 파일에서 #pragma hdrstop 매개 변수를 사용하면 어떻게됩니까?
+1 사양 링크입니다. – pimvdb
설명과 솔루션을 제공해 주셔서 감사합니다. – AppleGrew