Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 여러 이미지를 하나의 이미지로 합치는 방법

JavaScript로 여러 이미지 합치기

웹 개발을 하다 보면 두 개 이상의 이미지를 겹치거나 합쳐서 하나의 이미지로 만들어야 하는 경우가 있습니다. JavaScript에서는 Canvas API를 활용하면 별도의 라이브러리나 서버 작업 없이 브라우저에서 바로 이미지를 합성할 수 있습니다.

핵심 원리는 간단합니다. 먼저 <canvas> 요소에 2D 드로잉 컨텍스트를 가져온 뒤, drawImage() 메서드로 첫 번째 이미지를 그리고, globalAlpha 속성으로 투명도를 조절하며 두 번째 이미지를 같은 위치에 겹쳐 그리는 방식입니다.

아래는 두 개의 이미지를 반투명하게 겹쳐 하나로 합치는 전체 예제 코드입니다.

예제 코드

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>이미지 합성 예제</title>
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
</style>
</head>
<body>
<h1>여러 이미지를 하나로 합치기</h1>
<img class="image" src="https://i.picsum.photos/id/845/250/250.jpg?hmac=2l7QArh4UKul2qF-JvTjaBu3-WF2KpKBgpBALmFoxWY"/>
<img class="image" src="https://i.picsum.photos/id/925/250/250.jpg?hmac=twWJdaKT46cPk1aNvB7aKdiLZoQzvzu5VW85OEUO4ys"/>
<canvas class="result"></canvas>
<br />
<button class="Btn">합치기</button>
<h3>위 버튼을 클릭하면 두 이미지가 하나로 합쳐집니다</h3>
<script>
    let imgEle1 = document.querySelectorAll(".image")[0];
    let imgEle2 = document.querySelectorAll(".image")[1];
    let resEle = document.querySelector(".result");
    var context = resEle.getContext("2d");
    let BtnEle = document.querySelector(".Btn");
    BtnEle.addEventListener("click", () => {
        resEle.width = imgEle1.width;
        resEle.height = imgEle1.height;
        context.globalAlpha = 1.0;
        context.drawImage(imgEle1, 0, 0);
        context.globalAlpha = 0.5;
        context.drawImage(imgEle2, 0, 0);
    });
</script>
</body>
</html>

코드 설명

  • 이미지 요소 선택: document.querySelectorAll(".image")로 화면에 표시된 두 개의 <img> 요소를 가져옵니다.
  • 캔버스 크기 설정: 버튼 클릭 시 캔버스의 widthheight를 첫 번째 이미지 크기에 맞춰 지정합니다.
  • 첫 번째 이미지 그리기: globalAlpha1.0(불투명)으로 설정한 상태에서 drawImage(imgEle1, 0, 0)으로 좌표 (0, 0) 위치에 첫 번째 이미지를 그립니다.
  • 두 번째 이미지 겹치기: globalAlpha0.5(50% 투명)로 낮춘 후 두 번째 이미지를 같은 위치에 그려 자연스럽게 블렌딩 효과를 줍니다.

실행 결과

페이지를 열면 원본 이미지 두 장과 빈 캔버스, 그리고 버튼이 표시됩니다.

JavaScript로 여러 이미지를 하나의 이미지로 합치는 방법

'합치기' 버튼을 클릭하면 다음과 같이 두 이미지가 반투명하게 겹쳐진 결과가 캔버스에 나타납니다.

JavaScript로 여러 이미지를 하나의 이미지로 합치는 방법

참고 사항

이미지가 외부 도메인에서 로드되는 경우, 캔버스 오염(cross-origin) 문제로 인해 toDataURL() 등으로 결과 이미지를 추출할 때 제한이 있을 수 있습니다. 이 경우 이미지 요소에 crossorigin="anonymous" 속성을 추가하고 서버에서 CORS 헤더를 허용해 주어야 합니다. 또한 세로 나열 대신 가로·세로 오프셋 값을 조정하면 이미지를 나란히 붙이는 방식으로도 응용할 수 있습니다.