s

자바스크립트 기반으로 HTML Canvas에 이미지를 불러들여 테두리색입히기

· 2023-08-24 (목) 19:47:46 · 3782

자바스크립트 기반으로 HTML Canvas에 이미지를 그리고 매끄러운 아웃라인을 그리는 예시 코드입니다. 이 코드는 캔버스의 `ctx` 컨텍스트를 사용하며, 이미지 파일 경로를 `imagePath` 변수에 설정해주어야 합니다.

[code]
// 캔버스 요소 가져오기
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

// 이미지 로드 및 그리기
const image = new Image();
image.onload = function() {
// 캔버스에 이미지 그리기
ctx.drawImage(image, 0, 0);

// 이미지 데이터 가져오기
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const data = imageData.data;

// 픽셀 단위로 반복하면서 아웃라인 그리기
for (let i = 0; i < data.length; i += 4) {
const alpha = data[i + 3];

if (alpha !== 0) {
const x = (i / 4) % canvas.width;
const y = Math.floor(i / (4 * canvas.width));

// 일정 거리 내에 매끄러운 아웃라인 그리기
const outlineColor = [255, 0, 255]; // Magenta 색상
const outlineRadius = 5; // 아웃라인 반지름

for (let j = -outlineRadius; j <= outlineRadius; j++) {
for (let k = -outlineRadius; k <= outlineRadius; k++) {
const offsetX = x + j;
const offsetY = y + k;

if (offsetX >= 0 && offsetX < canvas.width && offsetY >= 0 && offsetY < canvas.height) {
const offsetIndex = (offsetY * canvas.width + offsetX) * 4;
const distance = Math.sqrt(j * j + k * k);
const opacity = 1 - distance / outlineRadius;

// 매끄러운 아웃라인 그리기
data[offsetIndex] = outlineColor[0];
data[offsetIndex + 1] = outlineColor[1];
data[offsetIndex + 2] = outlineColor[2];
data[offsetIndex + 3] = Math.round(opacity * alpha);
}
}
}
}
}

// 변경된 이미지 데이터로 캔버스에 다시 그리기
ctx.putImageData(imageData, 0, 0);
};

// 이미지 파일 경로 설정
const imagePath = 'image.png';

// 이미지 로드 시작
image.src = imagePath;
[/code]

위의 코드는 캔버스 요소(`<canvas>`)를 가져와서 `ctx` 컨텍스트를 사용하여 이미지를 그립니다. 이후 `getImageData()` 메소드를 사용하여 이미지 데이터를 가져오고, 픽셀 단위로 반복하면서 알파 값을 확인하여 불투명한 영역에 아웃라인을 그리게 됩니다. 매끄러운 아웃라인을 그리기 위해 지정한 일정 거리 내의 픽셀들에 Magenta 색상을 부여하고, 아웃라인의 투명도를 조절하여 매끄럽게 그려줍니다.

|
댓글을 작성하시려면 로그인이 필요합니다.

개발자팁

5,403건

개발과 관련된 유용한 정보를 공유하세요. 질문은 QA에서 해주시기 바랍니다.

+
분류 제목 글쓴이 날짜 조회
23-04-08 조회 2,642
23-03-31 조회 2,278
23-03-29 조회 2,664
23-03-28 조회 2,045
23-03-27 조회 2,772
JavaScript 23-02-22 조회 3,294
23-02-21 조회 2,500
23-03-10 조회 4,149
23-09-02 조회 2,415
기타 23-08-14 조회 1,617
JavaScript 23-09-04 조회 2,022
node.js 23-09-02 조회 1,616
JavaScript 23-09-01 조회 4,902
PHP 23-08-31 조회 2,108
node.js 23-08-29 조회 1,591
node.js 23-08-28 조회 2,155
PHP 23-08-27 조회 2,755
MySQL 23-08-26 조회 3,167
PHP 23-08-25 조회 3,211
JavaScript 23-08-24 조회 3,783
기타 23-08-23 조회 4,024
기타 23-08-22 조회 1,511
node.js 23-08-21 조회 2,535
JavaScript 23-08-20 조회 2,414
node.js 23-08-19 조회 3,632
node.js 23-08-18 조회 4,725
node.js 23-08-17 조회 3,403
PHP 23-08-16 조회 5,256
node.js 23-08-15 조회 3,734
PHP 23-08-14 조회 4,340