HTMLCanvasElement: toDataURL() Methode
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Die HTMLCanvasElement.toDataURL() Methode gibt eine Daten-URL zurück, die eine Darstellung des Bildes im durch den type Parameter angegebenen Format enthält.
Das gewünschte Dateiformat und die Bildqualität können angegeben werden.
Wenn das Dateiformat nicht angegeben ist oder das angegebene Format nicht unterstützt wird, wird die Daten als image/png exportiert.
Mit anderen Worten, wenn der zurückgegebene Wert mit data:image/png für jeden anderen angeforderten type beginnt, wird dieses Format nicht unterstützt.
Browser sind verpflichtet, image/png zu unterstützen; viele werden zusätzlich Formate wie image/jpeg und image/webp unterstützen.
Die erzeugten Bilddaten werden für Dateiformate, die das Encodieren von Auflösungsmetadaten unterstützen, eine Auflösung von 96dpi haben.
Warnung:
toDataURL() codiert das gesamte Bild in einem In-Memory-String. Bei größeren Bildern kann dies Leistungsauswirkungen haben und sogar das Längenlimit für URLs im Browser überschreiten, wenn es zu HTMLImageElement.src zugewiesen wird. Im Allgemeinen sollten Sie eher toBlob() bevorzugen, in Kombination mit URL.createObjectURL().
Syntax
toDataURL()
toDataURL(type)
toDataURL(type, quality)
Parameter
typeOptional-
Ein String, der das Bildformat angibt. Der Standardtyp ist
image/png; dieses Bildformat wird auch verwendet, wenn der angegebene Typ nicht unterstützt wird. qualityOptional-
Eine
Numberzwischen0und1, die die Bildqualität angibt, die verwendet werden soll, wenn Bilder mit Dateiformaten erstellt werden, die verlustbehaftete Komprimierung unterstützen (wieimage/jpegoderimage/webp). Ein User-Agent verwendet seinen Standardqualitätswert, wenn diese Option nicht angegeben ist, oder wenn die Zahl außerhalb des erlaubten Bereichs liegt.
Rückgabewert
Ein String, der die angeforderte Daten-URL enthält.
Wenn die Höhe oder Breite der Leinwand 0 ist oder größer als die maximale Leinwandgröße ist, wird der String "data:," zurückgegeben.
Ausnahmen
SecurityError-
Das Bitmap der Leinwand ist nicht "origin clean"; mindestens einige ihrer Inhalte wurden oder könnten von einer anderen Seite als derjenigen geladen worden sein, von der das Dokument selbst geladen wurde.
Beispiele
Angenommen, dieses <canvas> Element:
<canvas id="canvas" width="5" height="5"></canvas>
Sie können eine Daten-URL der Leinwand mit den folgenden Zeilen erhalten:
const canvas = document.getElementById("canvas");
const dataURL = canvas.toDataURL();
console.log(dataURL);
// "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNby
// blAAAADElEQVQImWNgoBMAAABpAAFEI8ARAAAAAElFTkSuQmCC"
Bildqualität mit JPEGs festlegen
const fullQuality = canvas.toDataURL("image/jpeg", 1.0);
// data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ…9oADAMBAAIRAxEAPwD/AD/6AP/Z"
const mediumQuality = canvas.toDataURL("image/jpeg", 0.5);
const lowQuality = canvas.toDataURL("image/jpeg", 0.1);
Beispiel: Bilder dynamisch ändern
Sie können diese Technik in Verbindung mit Mausereignissen verwenden, um Bilder dynamisch zu ändern (Graustufen vs. Farbe in diesem Beispiel):
HTML
<img class="grayscale" src="myPicture.png" alt="Description of my picture" />
JavaScript
function showColorImg() {
this.style.display = "none";
this.nextSibling.style.display = "inline";
}
function showGrayImg() {
this.previousSibling.style.display = "inline";
this.style.display = "none";
}
function removeColors() {
const images = document.getElementsByClassName("grayscale");
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
for (const colorImg of images) {
const width = colorImg.offsetWidth;
const height = colorImg.offsetHeight;
canvas.width = width;
canvas.height = height;
ctx.drawImage(colorImg, 0, 0);
const imgData = ctx.getImageData(0, 0, width, height);
const pix = imgData.data;
const pixLen = pix.length;
for (let pixel = 0; pixel < pixLen; pixel += 4) {
pix[pixel + 2] =
pix[pixel + 1] =
pix[pixel] =
(pix[pixel] + pix[pixel + 1] + pix[pixel + 2]) / 3;
}
ctx.putImageData(imgData, 0, 0);
const grayImg = new Image();
grayImg.src = canvas.toDataURL();
grayImg.onmouseover = showColorImg;
colorImg.onmouseout = showGrayImg;
ctx.clearRect(0, 0, width, height);
colorImg.style.display = "none";
colorImg.parentNode.insertBefore(grayImg, colorImg);
}
}
removeColors();
Spezifikationen
| Specification |
|---|
| HTML> # dom-canvas-todataurl-dev> |
Browser-Kompatibilität
Loading…
Siehe auch
- Daten-URLs in der HTTP Referenz.