Spec-Zone.ru › Web APIs

ImageCapture

Экспериментально: Это экспериментальная технология
Перед использованием в производстве внимательно проверьте таблицу совместимости с браузерами.

Интерфейс ImageCapture API захвата изображений из потока медиа предоставляет методы для захвата изображений или фотографий с камеры или другого фотографического устройства. Он предоставляет интерфейс для захвата изображений с фотографического устройства, указанного с помощью допустимого MediaStreamTrack.

Конструктор

ImageCapture() Экспериментально

Создаёт новый объект ImageCapture, который можно использовать для захвата статических кадров (фотографий) с заданного MediaStreamTrack, представляющего видеопоток.

Свойства экземпляра

ImageCapture.track Только для чтения Экспериментально

Возвращает ссылку на MediaStreamTrack, переданный в конструктор.

Методы экземпляра

ImageCapture.takePhoto() Экспериментально

Производит одиночный снимок с помощью устройства захвата видео, источником которого является MediaStreamTrack, и возвращает Promise, который разрешается с Blob, содержащим данные.

ImageCapture.getPhotoCapabilities() Экспериментально

Возвращает Promise, который разрешается объектом, содержащим диапазоны доступных параметров конфигурации.

ImageCapture.getPhotoSettings() Экспериментально

Возвращает Promise, который разрешается объектом, содержащим текущие параметры конфигурации фото.

ImageCapture.grabFrame() Экспериментально

Создаёт снимок текущего видео в MediaStreamTrack, возвращая ImageBitmap, если успешно.

Пример

Следующий код взят из примера захвата кадра - снимка Chrome. Поскольку ImageCapture требует места для захвата изображения, пример ниже начинается с устройства медиа устройства (другими словами, камеры).

Этот пример показывает, приблизительно, MediaStreamTrack, извлечённый из MediaStream устройства. Затем трек используется для создания объекта ImageCapture, чтобы можно было вызвать takePhoto() и grabFrame(). Наконец, он показывает, как применять результаты этих вызовов к объекту холста.

let 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.error(error));
}

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

function onTakePhotoButtonClick() {
  imageCapture
    .takePhoto()
    .then((blob) => createImageBitmap(blob))
    .then((imageBitmap) => {
      const canvas = document.querySelector("#takePhotoCanvas");
      drawCanvas(canvas, imageBitmap);
    })
    .catch((error) => console.error(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", () => {
  document.querySelector("#grabFrameButton").disabled = false;
  document.querySelector("#takePhotoButton").disabled = false;
});

Спецификации

Спецификация
MediaStream Image Capture
# imagecaptureapi

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
ImageCapture 59 79 35 46 17.4 59 Нет 43 17.4 7.0 59
ImageCapture 59 79 35 46 17.4 59 Нет 43 17.4 7.0 59
getPhotoCapabilities 59 79 Нет 46 17.4 59 Нет 43 17.4 7.0 59
getPhotoSettings 61 79 Нет 46 17.4 61 Нет 43 17.4 8.0 61
grabFrame 59 79 Нет 46 Нет 59 Нет 43 Нет 7.0 59
takePhoto 60
59–60photoSettings параметр не поддерживается.
79 35 47
46–47photoSettings параметр не поддерживается.
17.4 60
59–60photoSettings параметр не поддерживается.
Нет 44
43–44photoSettings параметр не поддерживается.
17.4 8.0
7.0–8.0photoSettings параметр не поддерживается.
60
59–60photoSettings параметр не поддерживается.
track 59 79 35 46 17.4 59 Нет 43 17.4 7.0 59

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ImageCapture

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API