我有一个高度,宽度和参数的图像。目标是在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()
}
答案 0 :(得分:1)
要将图像数据嵌入SVG,您需要使用数据URL。您对图像文件数据进行Base64编码,然后将其附加到包含URL方案data:
,MIME类型(例如image/png
)和编码(base64
)的前缀字符串中。 / p>
SVG最终将如下所示:
<svg ...>
<image xlink:href="data:image/png;base64,PHN2ZyB4bWxucz0iaHR0cDo...etc..."/>
</svg>