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()
err = d.Wait()
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(有效)