Canvas tutorial #7 (Images)

2020. 4. 6. 20:04·개발/Canvas
728x90

※ 이 글은 예전 블로그에서 퍼왔으며 2020.3.5.에 작성된 글입니다.

※ 이 글은 해당사이트를 번역한 것입니다.


Draw Image

HTML5Canvas에서 이미지를 그리려면 이미지 객체와 대상 지점을 필요로 하는 drawImage( )를 사용할 수 있다.

대상 지점(destination point)은 캔버스 왼쪽 위 모서리를 기준으로 canvas의 왼쪽 위 모서리를 정의한다.

drawImage( )는 이미지 객체가 필요하므로 먼저 이미지를 생성한 후 로드될 때까지 기다려야 한다.

이미지 객체의 onload속성을 사용하여 이 작업을 수행할 수 있습니다.

context.drawImage(imageObj, X, Y);

ex) 예시 코드
const canvas = document.getElementById('myCanvas');
const context = canvas.getContext('2d');
const imageObj = new Image();

imageObj.onload = function() {
  context.drawImage(imageObj, 69, 50);
};
imageObj.src = 'https://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';

Image Size

context.drawImage(imageObj, X, Y, Width, Height);

Image Crop

context.drawImage(imageObj, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight);
/*
imageObj: 이미지 객체,
sourceX: 이미지 내에서의 X좌표,
sourceY: 이미지 내에서의 Y좌표,
sourceWidth: 이미지를 자를 가로 길이,
sourceHeight: 이미지를 자를 세로 길이,
destX: 브라우저 왼쪽으로 부터 멀어질 X값,
destY: 브라우저 위로 부터 멀어질 Y값,
destWidth: 브라우저에서 보여질 이미지의 가로 길이,
destHeight: 브라우저에서 보여질 이미지의 세로 길이
*/

Image Loader

HTML5Canvas application에서 여러 이미지를 사용할 경우엔 캔버스에 그리기 전에 미리 모든 이미지를 불러오는 것이 좋습니다. Load process를 단순화 하기 위해선 이미지 소스의 해시를 가져오고 이미지 해시를 생성한 다음 모든 이미지가 로드될 때마다 사용자 정의 함수를 호출하는 이미지 로더 기능을 사용하는 것이 편리합니다.

function loadImages(sources, callback) {
    const images = {};
    const loadedImages = 0;
    const numImages = 0;
    // get num of sources
    for (let src in sources) {
        numImages++;
    }
    for (let src in sources) {
        images[src] = new Image();
        images[src].onload = function () {
            if (++loadedImages >= numImages) {
                callback(images);
            }
        };
        images[src].src = sources[src];
    }
}
const canvas = document.getElementById('myCanvas');
const context = canvas.getContext('2d');

const sources = {
    darthVader: 'https://www.html5canvastutorials.com/demos/assets/darth-vader.jpg',
    yoda: 'https://www.html5canvastutorials.com/demos/assets/yoda.jpg'
};

loadImages(sources, function (images) {
    context.drawImage(images.darthVader, 100, 30, 200, 137);
    context.drawImage(images.yoda, 350, 55, 93, 104);
});

 

저작자표시 (새창열림)

'개발 > Canvas' 카테고리의 다른 글

HTML5 Canvas Tutorial for Beginners 필기  (0) 2020.04.06
Canvas tutorial #6 (Fill Styles)  (0) 2020.04.06
Canvas tutorial #5 (Shapes)  (0) 2020.04.06
Canvas tutorial #4 (Paths)  (0) 2020.04.06
Canvas tutorial #3 (Curves)  (0) 2020.04.06
'개발/Canvas' 카테고리의 다른 글
  • HTML5 Canvas Tutorial for Beginners 필기
  • Canvas tutorial #6 (Fill Styles)
  • Canvas tutorial #5 (Shapes)
  • Canvas tutorial #4 (Paths)
기짜낭
기짜낭
생각이 많지만, 지금 내가 해야할 것을 하자.
  • 기짜낭
    So tired
    기짜낭
    • 분류 전체보기 (199)
      • 개발 (11)
        • Javascript (19)
        • Typescript (5)
        • Canvas (8)
        • React (13)
        • C (3)
      • 활동 (63)
        • 개인 프로젝트 (33)
        • 나눔 서포터즈 3기 (9)
        • 멋쟁이 사자처럼 (7)
        • 0&1 C++ 자료구조 스터디 (0)
        • 제 9회 창업 아이디어톤 (3)
        • Poom (ZeroWasteShop) (3)
        • 해커톤 (2)
        • 우테코 프리코스 7기 (6)
      • 알고리즘 (27)
        • 알고리즘 정리 (5)
        • 백준 (18)
        • 프로그래머스 (4)
      • 강연 (7)
      • 독서 (18)
      • 회고 & 생각 (16)
        • 연간회고 (4)
      • 기타 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • ※ 예전 블로그
  • 인기 글

  • 태그

    1주에 1권씩
    HTML
    CSS
    개념
    독후감
    react
    Erica
    디자인
    한양대학교
    타입스크립트
    Javascript
    canvas
    에리카
    프론트엔드
    프로그래밍
    알고리즘
    군대
    3기
    독서
    프로젝트
    1주 1권
    개발
    ES6
    HTML5
    대학
    TypeScript
    우테코
    개발자
    tutorial
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
기짜낭
Canvas tutorial #7 (Images)
상단으로

티스토리툴바