ImageCapture

MediaStream Image Capture APIImageCapture 인터페이스는 유효한 MediaStreamTrack이 참조하는 카메라 또는 기타 촬영 장치를 통해 이미지나 사진을 촬영하기 위한 메서드를 제공합니다.

생성자

ImageCapture()

비디오 스트림을 나타내는 MediaStreamTrack에서 정지 프레임(사진)을 캡처하기 위한 ImageCapture 객체를 반환합니다.

속성

ImageCapture.track 읽기 전용

생성자에 전달한 MediaStreamTrack의 참조를 반환합니다.

메서드

ImageCapture 인터페이스는 EventTarget의 메서드를 상속하며, 다음 메서드도 포함합니다.

ImageCapture.takePhoto()

MediaStreamTrack의 출처 비디오 캡처 장치를 통해 단일 노출 촬영을 한 후, 그 데이터를 담은 Blob으로 이행하는 Promise를 반환합니다.

ImageCapture.getPhotoCapabilities()

가능한 설정 옵션을 담은 PhotoCapabilities 객체로 이행하는 Promise를 반환합니다.

ImageCapture.getPhotoSettings()

현재 사진 설정을 담은 PhotoSettings 객체로 이행하는 Promise를 반환합니다.

ImageCapture.grabFrame()

MediaStreamTrack의 라이브 비디오에서 스냅샷을 찍은 후, 성공했으면 ImageBitmap을 반환합니다.

예제

다음 코드는 Chrome의 Grab Frame - Take Photo Sample에서 가져온 것입니다. ImageCapture는 이미지를 캡처할 도구가 필요하므로, 다음 예제는 브라우저 단말기의 미디어 장치(카메라)로 시작합니다.

이 예제는 MediaStream으로부터 추출한 MediaStreamTrack부터 시작합니다. 그 다음엔 해당 트랙을 사용해 takePhoto()grabFrame()을 호출할 ImageCapture 객체를 생성합니다. 마침내, 최종 결과를 캔버스 객체에 적용합니다.

js
var imageCapture;

function onGetUserMediaButtonClick() {
  navigator.mediaDevices
    .getUserMedia({ video: true })
    .then((mediaStream) => {
      document.querySelector("video").srcObject = mediaStream;

      const track = mediaStream.getVideoTracks()[0];
      imageCapture = new ImageCapture(track);
    })
    .catch((error) => console.log(error));
}

function onGrabFrameButtonClick() {
  imageCapture
    .grabFrame()
    .then((imageBitmap) => {
      const canvas = document.querySelector("#grabFrameCanvas");
      drawCanvas(canvas, imageBitmap);
    })
    .catch((error) => console.log(error));
}

function onTakePhotoButtonClick() {
  imageCapture
    .takePhoto()
    .then((blob) => createImageBitmap(blob))
    .then((imageBitmap) => {
      const canvas = document.querySelector("#takePhotoCanvas");
      drawCanvas(canvas, imageBitmap);
    })
    .catch((error) => console.log(error));
}

/* Utils */

function drawCanvas(canvas, img) {
  canvas.width = getComputedStyle(canvas).width.split("px")[0];
  canvas.height = getComputedStyle(canvas).height.split("px")[0];
  let ratio = Math.min(canvas.width / img.width, canvas.height / img.height);
  let x = (canvas.width - img.width * ratio) / 2;
  let y = (canvas.height - img.height * ratio) / 2;
  canvas.getContext("2d").clearRect(0, 0, canvas.width, canvas.height);
  canvas
    .getContext("2d")
    .drawImage(
      img,
      0,
      0,
      img.width,
      img.height,
      x,
      y,
      img.width * ratio,
      img.height * ratio,
    );
}

document.querySelector("video").addEventListener("play", function () {
  document.querySelector("#grabFrameButton").disabled = false;
  document.querySelector("#takePhotoButton").disabled = false;
});

명세

Specification
MediaStream Image Capture
# imagecaptureapi

브라우저 호환성

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
ImageCapture
Experimental
ImageCapture() constructor
Experimental
getPhotoCapabilities
Experimental
getPhotoSettings
Experimental
grabFrame
Experimental
takePhoto
Experimental
track
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
No support
No support
Experimental. Expect behavior to change in the future.
User must explicitly enable this feature.
Uses a non-standard name.
Has more compatibility info.