이번 블로그 포스트에서는 자바스크립트와 MediaStream API를 활용하여 웹에서 실시간 이미지 필터링 기능을 개발하는 방법에 대해 알아보겠습니다.
목차
MediaStream API 소개
MediaStream API는 웹 브라우저에서 미디어 스트림(예: 비디오, 오디오)을 다루기 위한 API입니다. 이 API를 사용하면 웹 캠이나 화면 공유와 같은 기기의 미디어를 웹에서 쉽게 접근하고 활용할 수 있습니다.
실시간 이미지 필터링 개발 절차
-
웹캠 접근하기:
navigator.mediaDevices.getUserMedia()
메소드를 사용하여 웹캠에 접근합니다. 이를 통해 웹페이지에서 웹캠의 비디오 스트림을 가져올 수 있습니다.const video = document.querySelector('video'); navigator.mediaDevices.getUserMedia({ video: true }) .then(stream => { video.srcObject = stream; video.play(); }) .catch(e => console.error('Error accessing webcam:', e));
-
캔버스에 비디오 그리기:
<canvas>
요소를 사용하여 비디오 스트림을 그릴 수 있습니다.<canvas>
요소를 생성하고, 상태를 업데이트하는 함수를 만들어 비디오 프레임을 계속해서 그립니다.const video = document.querySelector('video'); const canvas = document.querySelector('canvas'); const ctx = canvas.getContext('2d'); function drawFrame() { ctx.drawImage(video, 0, 0, canvas.width, canvas.height); requestAnimationFrame(drawFrame); } // 비디오가 로드되면 그리기 시작 video.addEventListener('loadedmetadata', () => { canvas.width = video.videoWidth; canvas.height = video.videoHeight; drawFrame(); });
-
이미지 필터링 적용하기:
getContext('2d')
메소드를 사용하여 캔버스의 컨텍스트를 가져온 후, 해당 컨텍스트의 기능을 사용하여 이미지 필터링을 적용할 수 있습니다.function applyFilter(filterType) { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); // 이미지 필터링 로직 구현 ctx.putImageData(imageData, 0, 0); }
-
이벤트 핸들링: 필터링 옵션을 제공하는 버튼을 추가하고, 사용자의 이벤트(예: 버튼 클릭)에 따라 필터를 적용할 수 있도록 합니다.
<button onclick="applyFilter('grayscale')">Grayscale</button> <button onclick="applyFilter('sepia')">Sepia</button> <button onclick="applyFilter('blur')">Blur</button>
function applyFilter(filterType) { // 필터 타입에 따라 이미지 필터링 적용 }
결론
이번 포스트에서는 자바스크립트와 MediaStream API를 활용하여 웹에서의 실시간 이미지 필터링 기능을 개발하는 방법을 살펴보았습니다. 이를 통해 사용자는 웹캠으로 촬영한 비디오를 실시간으로 필터링하고, 다양한 효과를 적용할 수 있습니다.
이러한 실시간 이미지 필터링은 웹캠 기반의 어플리케이션 개발이나 창작적인 프로젝트에 매우 유용하게 사용될 수 있습니다.