SVG在Golang中使用字节数组追加/创建

时间:2018-01-16 03:17:21

标签: go svg

我有一个高度,宽度和参数的图像。目标是在SVG中创建一个带有pngs / jpgs的文件。此SVG必须是可移植的,无需任何其他文件。当我尝试使用SVGO文档中提到的方法(下面的代码)时,svg采用了对Image的链接引用。因此,当删除图像时,svg将不会包含图像。如何将Image的byte []推入SVG以便它变得可移植? 我试过以下代码。

func createSvgFromImage(ImageObjectStructures []ImageObjectStructure, filename string) {
    filename += ".svg"
    file, err := os.Create(filename)
    if err != nil {
        fmt.Println("svg file creation error:", err)
    }
    width := int(10000)  // Has to be taken from individual page size
    height := int(10000) // Has to be taken from individual page size
    svg := svg.New(file)
    svg.Start(width, height)
    for i := 0; i < len(ImageObjectStructures); i++ {
        svg.Image(ImageObjectStructures[i].XPosition, ImageObjectStructures[i].YPosition, ImageObjectStructures[i].Width, ImageObjectStructures[i].Height, ImageObjectStructures[i].ImagePath, ImageObjectStructures[i].ImageCaption)
        file.Write(ImageObjectStructures[i].ImageData)
    }
    svg.End()
}

1 个答案:

答案 0 :(得分:1)

要将图像数据嵌入SVG,您需要使用数据URL。您对图像文件数据进行Base64编码,然后将其附加到包含URL方案data:,MIME类型(例如image/png)和编码(base64)的前缀字符串中。 / p>

SVG最终将如下所示:

<svg ...>

  <image xlink:href="data:image/png;base64,PHN2ZyB4bWxucz0iaHR0cDo...etc..."/>

</svg>

你可以learn more about Data URLs here