Gmagick convert SVG to PNG with transparent/opacity background
作者:互联网
1 前言
在Ubuntu18.04环境下,用gographics/gmagick API使用了以下代码未有效果
pw := gmagick.NewPixelWand() pw.SetOpacity(1) //below all no work mw1.SetImageBackgroundColor(pw) mw1.SetImageColorspace(gmagick.COLORSPACE_TRANSPARENT) mw1.TransparentImage(pw,255,1)
在windows,使用其API,svg无法读起,提示未找到svg.la库,实际上有。
2 解决方案
使用cmd命令来执行得到svg转png,代码如下:
//main.go func ConvertSvg2PngByCmd(mw *gmagick.MagickWand) (mw2 *gmagick.MagickWand, err error) { svgFileName := mw.GetImageFilename() svgFileNameDest := svgFileName[:len(svgFileName)-3] + "png" fmt.Println("svgFileNameDest=", svgFileNameDest) err = CmdUtils.CmdSvg2Png(svgFileName, svgFileNameDest) if err != nil { log.Println("err CmdSvg2Png", err) } mw2 = gmagick.NewMagickWand() err = mw2.ReadImage(svgFileNameDest) if err != nil { log.Println("err ReadImage", err) } //mw2 = mw return } //CmdUtils.go package CmdUtils import ( "strings" "os/exec" "regexp" ) func CmdExec(cmd_str string) (err error) { //过滤多余空格,然后分割 cmd_str = compressStr(cmd_str) args := strings.Split(cmd_str, " ") d := exec.Command(args[0], args[1:]...) err = d.Start() return err } func CmdSvg2Png(src_svg string, src_dest string) (err error) { cmd_str := `gm convert -background none ` + src_svg + " " + src_dest err = CmdExec(cmd_str) return err } func compressStr(str string) string { if str == "" { return "" } //匹配一个或多个空白符的正则表达式 reg := regexp.MustCompile("\\s+") return reg.ReplaceAllString(str, " ") }
3 参考资料
1.https://graphicsmagick-help.narkive.com/qb0m319Z/gm-help-converting-from-svg-to-png-keeping-opacity(只有提问)
2.https://stackoverflow.com/questions/42293056/gmagick-convert-svg-to-png-with-transparent-background(只有提问)
3.https://phabricator.wikimedia.org/T76475(只有提问)
4.http://www.graphicsmagick.org/convert.html(有效)
标签:opacity,convert,err,SVG,svgFileNameDest,cmd,gmagick,str,svg 来源: https://www.cnblogs.com/fanbi/p/10487515.html