Ich habe diese Frage auf Stackoverflow gesehen, aber ich habe keine Antwort gefunden - alle vorgeschlagenen Lösungen funktionieren einfach nicht für mich.Wie man mit Qualitätsverlust mit Canvas drawImage umgehen kann?
Problem: Wenn ich ein base64-codiertes SVG als src zur Bildverarbeitung übergebe, sieht es so klar aus wie das ursprüngliche SVG-Bild. Aber wenn ich dieses Bild nehmen würde und es verwende, in Leinwand (via context.drawImage) - es wäre eine worser Qualität:
Die Frage ist - wie kann ich svg-basierte Bild in Leinwand zeichnen welches wird wie originalbild aussehen?
Was habe ich bisher versucht. Der beschriebene Ansatz here (re-iteratives Downsampling) funktioniert bei mir nicht. Der andere advise (um 0,5 zu den Dimensionen hinzuzufügen) hat die Situation außerdem nicht gespeichert. Spielen mit imageSmoothingEnabled - immer noch kein Glück.
Hier the codepen zur Erzeugung dieser besonderen Screenshot verwendet:
let toBase64 = (svg) => {
let serialized = new XMLSerializer().serializeToString(svg);
let base64prefix = "data:image/svg+xml;base64,"
let enc = base64prefix + btoa(serialized);
return enc;
}
let copySvg = (svg, img) => {
let enc = toBase64(svg);
img.src = enc;
}
let copyImg = (img, canvas) => {
context = canvas.getContext("2d");
context.drawImage(img, 0, 0, 200.5, 200.5);
}
let main =() => {
let svg = document.getElementById("svg");
let img = document.getElementById("img");
let canvas = document.getElementById("canvas");
copySvg(svg, img);
copyImg(img, canvas);
}
window.onload = main;
Die Antwort von severla ist korrekt, Sie befinden sich wahrscheinlich auf einem Monitor mit hoher Auflösung. Unzusammenhängend, aber immer noch wichtig, müssen Sie warten, bis Ihr Bild geladen ist, bevor Sie es auf der Leinwand zeichnen konnten (Sie haben für mich nicht funktioniert), und nur Chrome unterstützt das Zeichnen von Svg ohne und absoluten Höhe und Breite Attribut. [Fester Stift] (http://codepen.io/anon/pen/MmJXXO) – Kaiido