CanvasRenderingContext2D: getImageData() Methode
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die Methode getImageData() der CanvasRenderingContext2D des Canvas 2D API gibt ein ImageData-Objekt zurück, das die zugrunde liegenden Pixeldaten für einen bestimmten Bereich des Canvas darstellt.
Diese Methode wird nicht von der Transformationsmatrix des Canvas beeinflusst. Falls das angegebene Rechteck über die Grenzen des Canvas hinausgeht, sind die Pixel außerhalb des Canvas im zurückgegebenen ImageData-Objekt transparent schwarz.
Hinweis:
Bilddaten können mit der Methode putImageData() auf ein Canvas gemalt werden.
Weitere Informationen über getImageData() und allgemeine Manipulationen von Canvas-Inhalten finden Sie unter Pixelmanipulation mit Canvas.
Syntax
getImageData(sx, sy, sw, sh)
getImageData(sx, sy, sw, sh, settings)
Parameter
sx-
Die x-Achsen-Koordinate der oberen linken Ecke des Rechtecks, aus dem die
ImageDataextrahiert wird. sy-
Die y-Achsen-Koordinate der oberen linken Ecke des Rechtecks, aus dem die
ImageDataextrahiert wird. sw-
Die Breite des Rechtecks, aus dem die
ImageDataextrahiert wird. Positive Werte sind nach rechts, negative nach links. sh-
Die Höhe des Rechtecks, aus dem die
ImageDataextrahiert wird. Positive Werte sind nach unten, negative nach oben. settingsOptional-
Ein Objekt mit den folgenden Eigenschaften:
colorSpace-
Bestimmt den Farbraum der Bilddaten. Kann auf
"srgb"für den sRGB-Farbraum oder"display-p3"für den display-p3-Farbraum gesetzt werden. pixelFormat-
Bestimmt das Pixelformat. Mögliche Werte:
"rgba-unorm8", für RGBA mit 8 Bit pro Komponente in einem unbegrenzten normalisierten Format, unter Verwendung einesUint8ClampedArray."rgba-float16", für RGBA mit 16 Bit pro Komponente, unter Verwendung einesFloat16Array. Gleitkomma-Pixelwerte ermöglichen die Darstellung von Farben in beliebig breiten Farbräumen und mit hohem Dynamikbereich (HDR).
Rückgabewert
Ein ImageData-Objekt, das die Bilddaten für das spezifizierte Rechteck des Canvas enthält. Die Koordinaten der oberen linken Ecke des Rechtecks sind (sx, sy), während die Koordinaten der unteren Ecke (sx + sw - 1, sy + sh - 1) sind.
Hinweis:
Mit bestimmten Datenschutzeinstellungen (wie Fingerprinting-Schutz) wird dem Ergebnis von getImageData() ein zufälliges, subtil eingefügtes Rauschen hinzugefügt, um zu verhindern, dass die Website das Rendering-Gerät des Benutzers ermitteln kann. Daher können putImageData() und getImageData() möglicherweise nicht verlustfrei hin- und hergehen.
Ausnahmen
IndexSizeErrorDOMException-
Wird ausgelöst, wenn entweder
swodershnull sind. SecurityErrorDOMException-
Der Canvas enthält oder könnte Pixel enthalten, die von einem anderen Ursprung als dem, von dem das Dokument selbst geladen wurde, geladen wurden. Um zu vermeiden, dass in diesem Fall ein
SecurityErrorDOMExceptionausgelöst wird, konfigurieren Sie CORS so, dass die Quellbildnutzung auf diese Weise erlaubt ist. Siehe Erlauben der Nutzung von Bildern und Canvas über Ursprungsgrenzen hinweg.
Beispiele
>Bilddaten von einem Canvas holen
In diesem Beispiel wird ein Bild gezeichnet und dann getImageData() verwendet, um einen Teil des Canvas zu erfassen.
Wir verwenden getImageData(), um einen Abschnitt des Bildes zu extrahieren, beginnend bei (10, 20), mit einer Breite von 80 und einer Höhe von 230. Wir zeichnen dann diesen Abschnitt dreimal, und platzieren die Abschnitte progressiv unterhalb und rechts vom letzten Abschnitt.
HTML
<canvas id="canvas" width="700" height="400"></canvas>
JavaScript
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
const image = new Image();
image.src = "plumeria.jpg";
image.addEventListener("load", () => {
ctx.drawImage(image, 0, 0, 233, 320);
const imageData = ctx.getImageData(10, 20, 80, 230);
ctx.putImageData(imageData, 260, 0);
ctx.putImageData(imageData, 380, 50);
ctx.putImageData(imageData, 500, 100);
});
Ergebnis
Farbraumkonvertierung
Die optionale colorSpace-Einstellung ermöglicht es Ihnen, Bilddaten im gewünschten Format zu erhalten.
const context = canvas.getContext("2d", { colorSpace: "display-p3" });
context.fillStyle = "color(display-p3 0.5 0 0)";
context.fillRect(0, 0, 10, 10);
// Get ImageData converted to sRGB
const imageData = context.getImageData(0, 0, 1, 1, { colorSpace: "srgb" });
console.log(imageData.colorSpace); // "srgb"
Daten in unterschiedlichen Pixelformaten erhalten
Die optionale pixelFormat-Einstellung ermöglicht es Ihnen, Bilddaten im gewünschten Pixelformat zu erhalten.
const context = canvas.getContext("2d");
const defaultImageData = context.getImageData(0, 0, 1, 1);
console.log(defaultImageData.pixelFormat); // "rgba-unorm8"
const float16ImageData = context.getImageData(0, 0, 1, 1, {
pixelFormat: "rgba-float16",
});
console.log(float16ImageData.pixelFormat); // "rgba-float16"
Spezifikationen
| Spezifikation |
|---|
| HTML> # dom-context-2d-getimagedata-dev> |
Browser-Kompatibilität
Siehe auch
- Die Schnittstelle, die diese Methode definiert:
CanvasRenderingContext2D ImageDataObjektCanvasRenderingContext2D.putImageData()- Pixelmanipulation mit Canvas