Maison >développement back-end >Golang >Comment charger du SVG en ligne dans Go en utilisant GOTK3 et librsvg ?
l'éditeur php Youzi vous présentera comment utiliser GOTK3 et librsvg pour charger du SVG en ligne en langage Go. GOTK3 est une bibliothèque de liaison de langage Go permettant de créer des applications GUI multiplateformes, tandis que librsvg est une bibliothèque permettant de restituer des images SVG. En utilisant ces deux bibliothèques ensemble, nous pouvons facilement charger et afficher des images SVG en ligne en langage Go. Examinons ensuite les étapes spécifiques de mise en œuvre !
Je développe une application écrite en go. Il utilise gotk3, librsvg est installé et je peux créer (puis afficher) des images svg en utilisant gtk.imagenewfromfile(file-path-to-svg)
.
Maintenant, je veux créer par programme une image à partir d'un svg en ligne dans le code source... comme ceci :
color := "#FF0000" redSvg := "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n" + "<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" width=\"32px\" height=\"32px\" viewBox=\"0 0 32 32\" enable-background=\"new 0 0 32 32\" xml:space=\"preserve\">\n" + " <rect fill=\"" + color + "\" width=\"32\" height=\"32\"/>\n" + "</svg>" image, err := ImageNewFromSvg(redSvg) . . . func ImageNewFromSvg(svg string) (*gtk.Image, error) { ? }
...J'ai besoin de quelque chose à propos de imagenewfromsvg()
的实现的帮助。 gotk3 没有 imagenewfromsvg()
api,但它有 imagenewfrompixbuf()
.
J'ai essayé de créer un pixbuf à partir d'une chaîne (avec une balise svg) mais je n'ai pas pu le faire.
Est-il possible de créer une image à partir d'un svg en ligne défini dans le code source ? Si oui, quelle est l'implémentation de imagenewfromsvg()
? imagenewfromsvg()
的实现是什么?
您可以使用 gdk.pixbufnewfromdataonly
加载内联 svg,方法是将 svg 字符串作为字节片段传递给它,然后从中获取 pixbuf 并将其放入 gtk.imagenewfrompixbuf
以获得 *gtk.image
Solution de contournementimagenewfromsvg
gdk.pixbufnewfromdataonly
pour charger un svg en ligne en lui passant la chaîne svg sous forme de fragment d'octet, puis en extraire le pixbuf et le mettre dans gtk.imagenewfrompixbuf
pour obtenir *gtk.image
pour l'utiliser dans la fenêtre. Voici l'une des implémentations correctes de la fonction
que vous avez mentionnée :
func imagenewfromsvg(svg string) (*gtk.image, error){ pixbuf, err := gdk.pixbufnewfromdataonly([]byte(svg)) if err != nil { return nil, err } img, err := gtk.imagenewfrompixbuf(pixbuf) if err != nil { return nil, err } return img, nil }
package main import ( "log" "github.com/gotk3/gotk3/gtk" "github.com/gotk3/gotk3/gdk" ) func main() { gtk.Init(nil) win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL) if err != nil { log.Fatal("Unable to create window:", err) } win.SetTitle("Svg Example") win.Connect("destroy", func() { gtk.MainQuit() }) color := "#FF0000" svgdata := "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n" + "<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" width=\"32px\" height=\"32px\" viewBox=\"0 0 32 32\" enable-background=\"new 0 0 32 32\" xml:space=\"preserve\">\n" + " <rect fill=\"" + color + "\" width=\"32\" height=\"32\"/>\n" + "</svg>" svgImage, err := ImageNewFromSvg(svgdata) if err != nil { log.Fatal(err) } win.Add(svgImage) win.ShowAll() gtk.Main() } func ImageNewFromSvg(svg string) (*gtk.Image, error){ pixbuf, err := gdk.PixbufNewFromDataOnly([]byte(svg)) if err != nil { return nil, err } img, err := gtk.ImageNewFromPixbuf(pixbuf) if err != nil { return nil, err } return img, nil }Sortie : 🎜🎜🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!