Ich habe einige Diagramme mit D3js erstellt, die ich über JavaScript in ein PNG-Bild konvertieren möchte, so dass Benutzer das Diagramm herunterladen können.Konvertieren von SVG erstellt mit D3js zu PNG
Ich habe Lösungen gesehen, die das SVG in eine Arbeitsfläche konvertieren und die Zeichenfläche in ein Bild konvertieren. Das funktioniert nicht, weil die SVG Klassen verwendet, um die Elemente zu stylen (was ich wegen der Maintainability lieber nicht ändern würde), was dazu führt, dass die ganze Leinwand schwarz wird und sehr dicke Linien hat.
Ist es möglich, die SVG-Diagramme direkt in PNG zu konvertieren?
Die Seite ist in einem Ruby on Rails-Projekt, damit es nicht eine reine JavaScript-Lösung sein muss, aber ich würde die lieber mit JavaScript tun, so kann ich es auch in anderen Projekten umzusetzen.
Sorry, ich habe noch nichts mit SVG gemacht, also könnte diese Antwort Unsinn sein :). Wollen Sie sagen, dass bei der Verwendung von Klassen und nicht Inline-Styles die Dinge beim Konvertieren in Canvas zusammenhängen? In diesem Fall ist es nicht eine Frage der programmatischen Anwendung der Stile aus der CSS-Klasse vor der Konvertierung in Canvas? – Owen
Als ich diese Frage vor 2 Monaten gestellt habe, war das tatsächlich das Problem. Ich habe bereits eine Lösung implementiert, die dem entspricht, was Sie vorgeschlagen haben. Das Problem, auf das ich später gestoßen bin, ist, dass die meisten Browser das generierte Canvas/PNG nicht richtig darstellen. Dies führt dazu, dass Elemente fehlen und/oder das Bild schwarz wird. Ein Problem, das ich für den IE kennengelernt habe, ist, dass ich Daten-Uri nicht größer als 2.048 Zeichen übergeben kann, so dass ich nicht die ganze uri übergeben kann, um es zum Herunterladen zu präsentieren (nicht wirklich Frage bezogen). –