inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

canvas의 도형에 원하는 이미지들을 넣고 싶습니다.

325

ㄴㄹㅇㄹㄴㄹㅇ

작성한 질문수 6

0


const COLORS = [
  "#394fb8",
  "#554fb8",
  "#605ac7",
  "#2a91a8",
  "#2e9ab2",
  "#32a5bf",
  "#81b144",
  "#85b944",
  "#8fc549",
  "#e0af27",
  "#eeba2a",
  "#fec72e",
  "#bf342d",
  "#ca3931",
  "#d7423a",
];

export class Polygon {
  constructor(x, y, radius, sides) {
    this.x = x;
    this.y = y;
    this.radius = radius;
    this.sides = sides;
    this.rotate = 0;
  }

  animate(ctx, moveX) {
    ctx.save();

    const angle = PI2 / this.sides;
    const angle2 = PI2 / 4;

    ctx.translate(this.x, this.y);

    this.rotate += moveX * 0.008;
    ctx.rotate(this.rotate);

    for (let i = 0; i < this.sides; i++) {
      const x = this.radius * Math.cos(angle * i);
      const y = this.radius * Math.sin(angle * i);

      i == 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);

      ctx.save();
      ctx.fillStyle=COLORS[i]
      ctx.translate(x, y);
      ctx.rotate((((360 / this.sides) * i + 45) * Math.PI) / 180);
      ctx.beginPath();
      for (let j = 0; j < 4; j++) {
        const x2 = 160 * Math.cos(angle2 * j);
        const y2 = 160 * Math.sin(angle2 * j);
        j == 0 ? ctx.moveTo(x2, y2) : ctx.lineTo(x2, y2);
      }
      ctx.fill();
      ctx.closePath();
      ctx.restore();
    }
    ctx.restore();
  }
}

지금은 COLORS 배열을 이용해 fillstyle의 색을 넣었는데, 색상 대신 특정 이미지들을 넣고싶습니다.

ctx.fillstyle = colors[i] 를 어떤 식으로 바꿔야할까요..?

javascript canvas html css

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

질문해주신 canvas에서 도형에 원하는 이미지를 채우는 방법에 대해 설명드리겠습니다.

먼저, 이미지를 도형에 채우기 위해서는 CanvasRenderingContext2D 인터페이스의 createPattern() 메서드를 사용해서 패턴을 생성해야 합니다. 이 메서드는 이미지, 캔버스, 또는 비디오를 이용해 패턴 객체를 생성하고, 이 패턴을 fillStyle 프로퍼티에 할당하는 방식으로 작동합니다.

다음은 createPattern() 메서드를 사용해서 도형에 이미지를 채우는 방법을 보여주는 간단한 예시 코드입니다.

// 이미지 로딩 함수
function loadImage(url) {
  return new Promise((resolve, reject) => {
    const image = new Image();
    image.onload = () => resolve(image);
    image.onerror = reject;
    image.src = url;
  });
}

// 이미지 패턴 적용 함수
async function drawPattern(ctx) {
  const image = await loadImage('이미지URL'); // 여기에 원하는 이미지 URL을 넣으세요
  const pattern = ctx.createPattern(image, 'repeat'); // repeat, repeat-x, repeat-y, no-repeat 중 선택

  ctx.fillStyle = pattern;
  // 이 부분에 도형 그리는 코드를 넣으세요. 예: ctx.fillRect(0, 0, canvas.width, canvas.height);
}

// Canvas에 그리기 예시
const canvas = document.getElementById('myCanvas');
if (canvas.getContext) {
  const ctx = canvas.getContext('2d');
  drawPattern(ctx);
}

위 코드에서 loadImage 함수는 Promise를 이용해 이미지가 로드될 때까지 대기한 후, 이미지 객체를 반환합니다. 그 다음 drawPattern 함수에서 loadImage를 호출하여 이미지를 로드하고, 이 이미지를 createPattern 메서드를 통해 패턴으로 생성합니다. 마지막으로 이 패턴을 fillStyle에 할당하고, 캔버스에 도형을 그리는 코드를 사용하여 이미지 패턴으로 채워진 도형을 그립니다.

ctx.fillStyle = COLORS[i] 부분을 위의 코드 예시에 따라 수정하면, 색상 대신 특정 이미지들로 도형을 채울 수 있습니다. 이미지 패턴을 여러 개 사용하려면, 이미지 URL 배열을 가지고 반복문을 돌면서 패턴을 생성하고 적용하는 방법을 활용하면 됩니다.

74. 데이터 캐시 - 1 (이론) 강의 영상 누락

0

12

1

2강 nodejs 3단계 설명 질문

0

25

1

imagesLoaded에 관한 질문

0

17

2

useEffect와 lifecycle문의

0

24

2

프론트엔드 학습 수준 문의

0

31

2

리액트 챕터별 코드에서 eslint 설정파일이 없어요

0

46

2

최근 코테, 과제 테스트 트렌드

0

65

2

lucide react 아이콘 설치

0

41

2

17강 zustand store 서버에서 생성

1

33

1

문의관련 문의

0

38

2

next.js 를 2대이상 실행하는 경우 제공하는 cache 기능들은 어떻게 되나요?

0

51

2

76. 전문성 더하기: 놓치면 아쉬운 관련 기술들 수업 자료가 없어요.

0

44

2

ai 도구 질문

0

31

1

저는 왜 콘솔에서 props가 한 줄만 찍히나요?

0

46

1

렌더링 차단 리소스 javascript 실행에 관련해서 질문 있습니다.

0

46

2

데이터 로딩중 화면만 계속 나와요!!

0

53

2

퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요

0

77

2

02-04 layout.tsx 구조가 달라요

0

57

2

불변성을 지키며 수정 삭제를 할때도 Map이 유리한가요?

0

52

1

개인 프로젝트로 앱 개발해서 다운로드 1300 달성했는데 어느 정도 의미가 있을까요? (안드로이드 개발자)

0

68

1

22강 강의 영상 문의 드립니다.

0

47

2

20강 마무리작업에서

0

38

2

아래 위치에 동영상이 보이지 않습니다.

0

52

1

Vercel 사용법

0

72

2