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(有效)  

猜你喜欢

转载自www.cnblogs.com/fanbi/p/10487515.html