ImageCapture
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig, bevor Sie diese produktiv verwenden.
Die ImageCapture
-Schnittstelle der MediaStream Image Capture API bietet Methoden, um die Aufnahme von Bildern oder Fotos von einer Kamera oder einem anderen fotografischen Gerät zu ermöglichen. Sie stellt eine Schnittstelle zum Erfassen von Bildern von einem fotografischen Gerät bereit, das durch einen gültigen MediaStreamTrack
referenziert wird.
Konstruktor
ImageCapture()
Experimentell-
Erstellt ein neues
ImageCapture
-Objekt, das verwendet werden kann, um Standbilder (Fotos) von einem gegebenenMediaStreamTrack
aufzunehmen, der einen Videostream darstellt.
Instanz-Eigenschaften
ImageCapture.track
Nur lesbar Experimentell-
Gibt eine Referenz auf den
MediaStreamTrack
zurück, der an den Konstruktor übergeben wurde.
Instanz-Methoden
ImageCapture.takePhoto()
Experimentell-
Macht eine einzelne Belichtung mit dem Videogerät, das einen
MediaStreamTrack
liefert, und gibt einPromise
zurück, das mit einemBlob
aufgelöst wird, der die Daten enthält. ImageCapture.getPhotoCapabilities()
Experimentell-
Gibt ein
Promise
zurück, das mit einem Objekt aufgelöst wird, das die Bereiche der verfügbaren Konfigurationsoptionen enthält. ImageCapture.getPhotoSettings()
Experimentell-
Gibt ein
Promise
zurück, das mit einem Objekt aufgelöst wird, das die aktuellen Foto-Konfigurationseinstellungen enthält. ImageCapture.grabFrame()
Experimentell-
Macht einen Schnappschuss des Live-Videos in einem
MediaStreamTrack
, wobei einImageBitmap
zurückgegeben wird, wenn erfolgreich.
Beispiel
Der folgende Code stammt von Chrome's Grab Frame - Take Photo Sample. Da ImageCapture
einen Ort benötigt, um ein Bild aufzunehmen, beginnt das untenstehende Beispiel mit dem Mediengerät eines Geräts (mit anderen Worten einer Kamera).
Dieses Beispiel zeigt, grob gesagt, einen MediaStreamTrack
, der aus dem 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 können.
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