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 Schnittstelle des Canvas 2D APIs gibt ein ImageData-Objekt zurück, das die zugrundeliegenden Pixeldaten für einen bestimmten Bereich der Leinwand repräsentiert.
Diese Methode wird nicht von der Transformationsmatrix der Leinwand beeinflusst. Wenn das angegebene Rechteck außerhalb der Grenzen der Leinwand liegt, sind die Pixel außerhalb der Leinwand im zurückgegebenen ImageData-Objekt transparent schwarz.
Hinweis:
Bilddaten können mit der putImageData() Methode auf eine Leinwand gemalt werden.
Weitere Informationen über getImageData() und die allgemeine Manipulation von Leinwänden finden Sie in 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 gehen nach rechts, negative nach links. sh-
Die Höhe des Rechtecks, aus dem die
ImageDataextrahiert wird. Positive Werte gehen nach unten, negative nach oben. settingsOptional-
Ein Objekt mit den folgenden Eigenschaften:
colorSpace-
Gibt den Farbraum der Bilddaten an. Kann auf
"srgb"für den sRGB-Farbraum oder"display-p3"für den display-p3-Farbraum gesetzt werden. pixelFormat-
Gibt das Pixelformat an. Mögliche Werte:
"rgba-unorm8", für RGBA mit 8 Bit pro Komponente im nicht-signierten normierten Format, wobei einUint8ClampedArrayverwendet wird."rgba-float16", für RGBA mit 16 Bit pro Komponente, wobei einFloat16Arrayverwendet wird. Gleitkomma-Pixelwerte ermöglichen die Darstellung von Farben in beliebig breiten Farbräumen und hohem Dynamikumfang (HDR).
Rückgabewert
Ein ImageData-Objekt, das die Bilddaten für das angegebene Rechteck der Leinwand 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 Fingerabdruckschutz) wird dem getImageData()-Ergebnis ein zufälliges, subtileres Rauschen hinzugefügt, um zu verhindern, dass die Website das Rendering-Gerät des Nutzers ableitet. Daher können putImageData() und getImageData() möglicherweise nicht verlustfrei sein.
Ausnahmen
IndexSizeErrorDOMException-
Wird ausgelöst, wenn
swodershnull ist. SecurityErrorDOMException-
Die Leinwand enthält oder kann Pixel enthalten, die aus einem Ursprung geladen wurden, der nicht jener ist, von dem das Dokument selbst geladen wurde. Um zu vermeiden, dass in diesem Fall eine
SecurityErrorDOMExceptionausgelöst wird, konfigurieren Sie CORS so, dass das Quellbild in dieser Weise verwendet werden darf. Siehe Freigabe von Bildern und Canvas für die Verwendung zwischen verschiedenen Ursprüngen.
Beispiele
>Bilddaten aus einem Canvas abrufen
Dieses Beispiel zeichnet ein Bild und verwendet dann getImageData(), um einen Abschnitt der Leinwand zu erfassen.
Wir verwenden getImageData(), um einen Teil des Bildes zu extrahieren, der bei (10, 20) beginnt und eine Breite von 80 und eine Höhe von 230 hat. Wir zeichnen diesen Abschnitt dann dreimal und positionieren 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 verschiedenen Pixelformaten abrufen
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 ImageData-ObjektCanvasRenderingContext2D.putImageData()- Pixelmanipulation mit Canvas