ImageCapture
Die ImageCapture-Schnittstelle der MediaStream Image Capture API bietet Methoden zum Erfassen von Bildern oder Fotos von einer Kamera oder einem anderen fotografischen Gerät. Sie stellt eine Schnittstelle zur Verfügung, um Bilder von einem fotografischen Gerät zu erfassen, das über einen gültigen MediaStreamTrack referenziert wird.
Konstruktor
ImageCapture()-
Erstellt ein neues
ImageCapture-Objekt, das verwendet werden kann, um Standbilder (Fotos) von einem gegebenenMediaStreamTrack, der einen Videostream darstellt, aufzunehmen.
Instanz-Eigenschaften
ImageCapture.trackSchreibgeschützt-
Gibt eine Referenz zu dem
MediaStreamTrackzurück, der dem Konstruktor übergeben wurde.
Instanz-Methoden
ImageCapture.takePhoto()-
Nimmt eine Einzelaufnahme mit dem Videogerät auf, das einen
MediaStreamTrackbereitstellt, und gibt einPromisezurück, das mit einemBlobaufgelöst wird, der die Daten enthält. ImageCapture.getPhotoCapabilities()-
Gibt ein
Promisezurück, das mit einem Objekt aufgelöst wird, das die Bereiche der verfügbaren Konfigurationsoptionen enthält. ImageCapture.getPhotoSettings()-
Gibt ein
Promisezurück, das mit einem Objekt aufgelöst wird, das die aktuellen Fotoeinstellungen enthält. ImageCapture.grabFrame()-
Nimmt einen Schnappschuss des Live-Videos in einem
MediaStreamTrackauf und gibt einImageBitmapzurück, wenn erfolgreich.
Beispiel
Der folgende Code ist aus Chrome's Grab Frame - Take Photo Sample entnommen. Da ImageCapture eine Quelle benötigt, um ein Bild aufzunehmen, beginnt das folgende Beispiel mit dem Mediengerät eines Geräts (mit anderen Worten, einer Kamera).
Dieses Beispiel zeigt, grob gesagt, einen MediaStreamTrack, der aus einem Gerät's MediaStream extrahiert wurde. Der Track wird dann verwendet, um ein ImageCapture-Objekt zu erstellen, damit takePhoto() und grabFrame() aufgerufen werden können. Schließlich wird gezeigt, wie man die Ergebnisse dieser Aufrufe auf ein Canvas-Objekt anwendet.
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
Loading…