ImageCapture
Das ImageCapture
-Interface der MediaStream Image Capture API bietet Methoden zur Erfassung von Bildern oder Fotos von einer Kamera oder anderen fotografischen Geräten. Es stellt eine Schnittstelle für die Aufnahme von Bildern von einem fotografischen Gerät bereit, das durch ein gültiges MediaStreamTrack
referenziert wird.
Konstruktor
ImageCapture()
-
Erstellt ein neues
ImageCapture
-Objekt, das verwendet werden kann, um Standbilder (Fotos) von einem angegebenenMediaStreamTrack
, das einen Videostream repräsentiert, aufzunehmen.
Instanz-Eigenschaften
ImageCapture.track
Schreibgeschützt-
Gibt eine Referenz auf das im Konstruktor übergebene
MediaStreamTrack
zurück.
Instanz-Methoden
ImageCapture.takePhoto()
-
Nimmt eine einzelne Belichtung mit dem Videofanggerät auf, das einen
MediaStreamTrack
speist, und gibt einPromise
zurück, das sich mit einemBlob
auflöst, der die Daten enthält. ImageCapture.getPhotoCapabilities()
-
Gibt ein
Promise
zurück, das sich mit einem Objekt auflöst, das die Bereiche verfügbarer Konfigurationsoptionen enthält. ImageCapture.getPhotoSettings()
-
Gibt ein
Promise
zurück, das sich mit einem Objekt auflöst, das die aktuellen Fotoeinstellungen enthält. ImageCapture.grabFrame()
Experimentell-
Nimmt einen Schnappschuss des Live-Videos in einem
MediaStreamTrack
auf und gibt einImageBitmap
zurück, falls erfolgreich.
Beispiel
Der folgende Code stammt aus Chrome's Grab Frame - Take Photo Sample. Da ImageCapture
einen Ort benötigt, um ein Bild zu erfassen, beginnt das unten stehende Beispiel mit einem Mediengerät des Geräts (mit anderen Worten, einer Kamera).
Dieses Beispiel zeigt grob, ein MediaStreamTrack
, das aus einem MediaStream
eines Geräts extrahiert wurde. Der Track wird dann verwendet, um ein ImageCapture
-Objekt zu erstellen, sodass takePhoto()
und grabFrame()
aufgerufen werden können. Schließlich zeigt es, wie die Ergebnisse dieser Aufrufe auf ein Canvas-Objekt angewendet werden.
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;
});
Spezifikationen
Specification |
---|
MediaStream Image Capture # imagecaptureapi |
Browser-Kompatibilität
BCD tables only load in the browser