php小編柚子將為大家介紹如何在Go語言中使用GOTK3和librsvg載入內聯SVG。 GOTK3是用來建立跨平台GUI應用程式的Go語言綁定函式庫,而librsvg是一個用於渲染SVG影像的函式庫。透過結合這兩個函式庫,我們可以在Go語言中輕鬆地載入和顯示內聯SVG圖像。接下來,讓我們一起來看看具體的實作步驟吧!
我正在開發一個用 go 寫的應用程式。它使用 gotk3,安裝了 librsvg,我可以使用 gtk.imagenewfromfile(file-path-to-svg)
建立(然後顯示)svg 映像。
現在我想以程式設計方式從原始程式碼中內聯的 svg 建立圖像......如下所示:
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) { ? }
...我需要一些關於 imagenewfromsvg()
的實作的幫助。 gotk3 沒有 imagenewfromsvg()
api,但它有 imagenewfrompixbuf()
。
我嘗試過從字串(帶有 svg 標記)創建 pixbuf,但我沒能做到。
是否可以從原始程式碼中定義的內聯 svg 建立映像?如果是這樣,imagenewfromsvg()
的實作是什麼?
您可以使用gdk.pixbufnewfromdataonly
載入內聯svg,方法是將svg 字串作為位元組片段傳遞給它,然後從中取得pixbuf 並將其放入gtk.imagenewfrompixbuf
以獲得*gtk.image
以在視窗中使用它。 < br/>
這是您提到的 imagenewfromsvg
函數的正確實作之一:
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 }
實際gtk程式中的使用範例:
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 }
以上是如何使用 GOTK3 和 librsvg 在 Go 中載入內聯 SVG?的詳細內容。更多資訊請關注PHP中文網其他相關文章!