canvas의 도형에 원하는 이미지들을 넣고 싶습니다.
325
작성한 질문수 6
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] 를 어떤 식으로 바꿔야할까요..?
답변 1
0
안녕하세요, 인프런 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





