Heim > Artikel > Backend-Entwicklung > Wie lade ich Inline-SVG in Go mit GOTK3 und librsvg?
php-Editor Youzi zeigt Ihnen, wie Sie GOTK3 und librsvg zum Laden von Inline-SVG in der Go-Sprache verwenden. GOTK3 ist eine Go-Sprachbindungsbibliothek zum Erstellen plattformübergreifender GUI-Anwendungen, während librsvg eine Bibliothek zum Rendern von SVG-Bildern ist. Durch die gemeinsame Verwendung dieser beiden Bibliotheken können wir Inline-SVG-Bilder problemlos in der Go-Sprache laden und anzeigen. Schauen wir uns als Nächstes die konkreten Umsetzungsschritte an!
Ich entwickle eine in go geschriebene Anwendung. Es verwendet gotk3, librsvg ist installiert und ich kann SVG-Bilder mit gtk.imagenewfromfile(file-path-to-svg)
erstellen (und dann anzeigen).
Jetzt möchte ich programmgesteuert ein Bild aus einer SVG-Datei inline im Quellcode erstellen ... so:
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) { ? }
...Ich brauche etwas über imagenewfromsvg()
的实现的帮助。 gotk3 没有 imagenewfromsvg()
api,但它有 imagenewfrompixbuf()
.
Ich habe versucht, aus einem String (mit SVG-Tag) ein Pixbuf zu erstellen, aber es ist mir nicht gelungen.
Ist es möglich, ein Bild aus einer im Quellcode definierten Inline-SVG zu erstellen? Wenn ja, wie sieht die Implementierung von imagenewfromsvg()
aus? imagenewfromsvg()
的实现是什么?
您可以使用 gdk.pixbufnewfromdataonly
加载内联 svg,方法是将 svg 字符串作为字节片段传递给它,然后从中获取 pixbuf 并将其放入 gtk.imagenewfrompixbuf
以获得 *gtk.image
Problemumgehungimagenewfromsvg
gdk.pixbufnewfromdataonly
verwenden, um ein Inline-SVG zu laden, indem Sie ihm die SVG-Zeichenfolge als Bytefragment übergeben und dann den Pixbuf daraus abrufen und in gtk.imagenewfrompixbuf einfügen
, um *gtk.image
zu erhalten und es im Fenster zu verwenden. Hier ist eine der korrekten Implementierungen der von Ihnen erwähnten
-Funktion:
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 }Ausgabe: 🎜🎜🎜
Das obige ist der detaillierte Inhalt vonWie lade ich Inline-SVG in Go mit GOTK3 und librsvg?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!