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 |
6059–60photoSettings параметр не поддерживается. |
79 | 35 | 4746–47photoSettings параметр не поддерживается. |
17.4 | 6059–60photoSettings параметр не поддерживается. |
Нет | 4443–44photoSettings параметр не поддерживается. |
17.4 | 8.07.0–8.0photoSettings параметр не поддерживается. |
6059–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