drawImage를 사용하여 트리밍 할 때의주의
그 이름대로 Canvas에 이미지를 그리는 방법이다.
기본적인 사용법은 다음과 같습니다.
예) 100x100 이미지 그리기
var canvas = document.getElemntById('canvas');
var ctx = canvas.getContext('2d');
var img = new Image();
img.src = "hoge.jpg";
img.onload = function() {
ctx.drawImage(img, 0, 0, 100, 100);
}
또 트리밍도 인수를 아래와 같이 건네주는 것으로 간단하게 할 수 있다.
예) 100x100의 이미지를 x=10, y=10의 지점에서 50x50의 크기로 트리밍하여 그리기
var canvas = document.getElemntById('canvas');
var ctx = canvas.getContext('2d');
var img = new Image();
img.src = "hoge.jpg";
img.onload = function() {
ctx.drawImage(img, 10, 10, 50, 50, 0, 0, 50, 50);
}
그럼, x=-10, y=-10의 지점으로부터 50x50의 사이즈로 트리밍해 묘화 해 보면 어떻게 될까.
var canvas = document.getElemntById('canvas');
var ctx = canvas.getContext('2d');
var img = new Image();
img.src = "hoge.jpg";
img.onload = function() {
ctx.drawImage(img, -10, -10, 70, 70, 0, 0, 70, 70);
}
Chrome
FireFox
Safari
이렇게 Safari만 표시되지 않는다.
이것은 무엇인가라고 하면, HTML5의 사양에서는 이와 같이 정의되고 있다.
소스 rectangle is the rectangle whose corners are the four points (sx, sy), (sx+sw, sy), (sx+sw, sy+sh), (sx, sy+sh).
If the source rectangle is not entirely within the source image, or if one of the sw or sh arguments is zero, the implementation must raise an INDEX_SIZE_ERR exception.
htps //w w. w3. rg/TR/2010/WD-2d 이렇게 xt-20100624
즉, 트리밍할 때의 직사각형의 모퉁이는 원 화상내로부터 돌려선 안 된다고 하는 것.
라는 것은, x=-10, y=-10을 drawImage로 설정하면 에러가 되어 draw 할 수 없는 것은 사양대로가 된다.
그래서 이번의 경우, Safari의 거동이 바르고, 그 외의 브라우저의 거동 쪽이 오히려 독자 사양이라고 하는 것 같다.
만약 Safari(mobile도 포함한다)를 대상 브라우저로 하고 있고, 아래와 같은 트리밍 기능을 구현하는 경우는, 트리밍의 테두리보다 원래 화상이 작아지지 않도록 제한할 필요가 있으므로 주의가 필요하다.
Reference
이 문제에 관하여(drawImage를 사용하여 트리밍 할 때의주의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/razokulover/items/5dd8c728aaaa30ac00f3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)