Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

HTMLCanvasElement: Methode toDataURL()

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 HTMLCanvasElement.toDataURL() gibt eine Data-URL zurück, die eine Darstellung des Bildes in dem durch den Parameter type angegebenen Format enthält.

Das gewünschte Dateiformat und die Bildqualität können angegeben werden. Wenn kein Dateiformat angegeben wird oder das angegebene Format nicht unterstützt wird, werden die Daten als image/png exportiert. Wenn der Rückgabewert bei einem anderen angeforderten type mit data:image/png beginnt, wird dieses Format also nicht unterstützt.

Browser müssen image/png unterstützen; viele unterstützen zusätzliche Formate wie image/jpeg und image/webp.

Die erzeugten Bilddaten haben bei Dateiformaten, die Metadaten zur Auflösung unterstützen, eine Auflösung von 96 dpi.

Warnung: toDataURL() kodiert das gesamte Bild als Zeichenfolge im Arbeitsspeicher. Bei größeren Bildern kann dies die Leistung beeinträchtigen. Wird die Zeichenfolge HTMLImageElement.src zugewiesen, kann sie sogar die Begrenzung der URL-Länge des Browsers überschreiten. Bevorzugen Sie daher im Allgemeinen toBlob() in Kombination mit URL.createObjectURL().

Syntax

js
toDataURL()
toDataURL(type)
toDataURL(type, quality)

Parameter

type Optional

Eine Zeichenfolge, die das Bildformat angibt. Der Standardwert ist image/png; dieses Bildformat wird auch verwendet, wenn das angegebene Format nicht unterstützt wird.

quality Optional

Eine Number zwischen 0 und 1, die die Bildqualität beim Erstellen von Bildern in Dateiformaten mit verlustbehafteter Komprimierung angibt (z. B. image/jpeg oder image/webp). Ein User Agent verwendet seinen Standardwert für die Qualität, wenn diese Option nicht angegeben wird oder die Zahl außerhalb des zulässigen Bereichs liegt.

Rückgabewert

Eine Zeichenfolge mit der angeforderten Data-URL.

Wenn die Höhe oder Breite des Canvas 0 ist oder die maximale Canvas-Größe überschreitet, wird die Zeichenfolge "data:," zurückgegeben.

Ausnahmen

SecurityError DOMException

Die Bitmap des Canvas ist nicht „origin-clean“: Zumindest ein Teil ihres Inhalts wurde oder könnte von einer anderen Website geladen worden sein als der, von der das Dokument selbst geladen wurde.

Beispiele

Gegeben sei dieses <canvas>-Element:

html
<canvas id="canvas" width="5" height="5"></canvas>

Mit den folgenden Zeilen können Sie eine Data-URL des Canvas abrufen:

js
const canvas = document.getElementById("canvas");
const dataURL = canvas.toDataURL();
console.log(dataURL);
// "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNby
// blAAAADElEQVQImWNgoBMAAABpAAFEI8ARAAAAAElFTkSuQmCC"

Bildqualität bei JPEGs festlegen

js
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 zusammen mit Mausereignissen verwenden, um Bilder dynamisch zu ändern (in diesem Beispiel zwischen Graustufen und Farbe):

HTML

html
<img class="grayscale" src="myPicture.png" alt="Description of my picture" />

JavaScript

js
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

Spezifikation
HTML
# dom-canvas-todataurl-dev

Browser-Kompatibilität

Siehe auch