JavaScript Canvas Bilder werden Komisch angezeigt, Lösung?
Hallo,
ich bastele gerade mit dem HTML5 Canvas herum und möchte dort mit JavaScript ein Bild anzeigen, dies Funktioniert auch allerdings werden sie sehr komisch angezeigt, meist zu groß oder verschwommen hier der JavaScript code:
"function drawImage(url) {
var img = new Image();
img.onload = function () {
ctx.drawImage(img,10, 10, 35, 35);
}
img.src = url
}"
hier habe ich schon mit den drawImage Parametern rumgespielt um es anzupassen allerdings kam kein gutes Ergebnis heraus...
Hier noch die canvas daten: width: 900px; height: 700px;
diese habe ich mit CSS angegeben.
Schonmal vielendank für eure Hilfe!
2 Antworten
diese habe ich mit CSS angegeben.
Und genau das ist das Problem: Die CSS-Eigenschaften geben lediglich die Breite und Höhe des Canvas-Elements an. Du musst aber die Breite und Höhe des Koordinatensystems des Canvas-Elements setzen, siehe:
The canvas element has two attributes to control the size of the element's bitmap: width and height. [...] If an attribute is missing, or if parsing its value returns an error, then the default value must be used instead. The width attribute defaults to 300, and the height attribute defaults to 150.
https://html.spec.whatwg.org/#attr-canvas-width, zul. abgerufen 2018-03-21T21:43+01:00
D. h., wenn du diese Angaben auslässt, wird die Standard-Größe (300x150 Pixel) verwendet. Live-Beispiel: https://jsfiddle.net/73eqqtpc/
Wie du siehst, ist das Bild abgeschnitten. Nun streckst du das abgeschnittene Bild mit CSS, sodass es unscharf wird. Live-Beispiel: https://jsfiddle.net/cnqepa1g/
Stattdessen musst du die HTML-Attribute width und height benutzen. Live-Beispiel: https://jsfiddle.net/mbjg0xav/
Gerne :) Ja, das ist beim canvas-Element leider etwas verwirrend.
Wenn das Bild verschwommen ist, dann ist die Auflösung des Bildes zu gering.
Ich würde dir aber, sofern du sehr viel mit dem Canvas vor hast, das KonvaJS Framework empfehlen, damit arbeite ich derzeit recht viel.
https://konvajs.github.io/docs/
Es nimmt der sehr viel Arbeit ab, vorallem was das Neuzeichnen des Canvasses angeht. Außerdem bietet es viele Möglichkeiten was z.B. Animationen angeht.
Danke, ich habe nämlich vorher immer von alle höhe und breite in CSS angegeben