1 前言

在Ubuntu18.04环境下,用gographics/gmagick API使用了以下代码未有效果

  1. pw := gmagick.NewPixelWand()
  2. pw.SetOpacity(1)
  3. //below all no work
  4. mw1.SetImageBackgroundColor(pw)
  5. mw1.SetImageColorspace(gmagick.COLORSPACE_TRANSPARENT)
  6. mw1.TransparentImage(pw,255,1)  

在windows,使用其API,svg无法读起,提示未找到svg.la库,实际上有。

2 解决方案

使用cmd命令来执行得到svg转png,代码如下:

  1. //main.go
  2. func ConvertSvg2PngByCmd(mw *gmagick.MagickWand) (mw2 *gmagick.MagickWand, err error) {
  3. svgFileName := mw.GetImageFilename()
  4. svgFileNameDest := svgFileName[:len(svgFileName)-3] + "png"
  5. fmt.Println("svgFileNameDest=", svgFileNameDest)
  6. err = CmdUtils.CmdSvg2Png(svgFileName, svgFileNameDest)
  7. if err != nil {
  8. log.Println("err CmdSvg2Png", err)
  9. }
  10.  
  11. mw2 = gmagick.NewMagickWand()
  12. err = mw2.ReadImage(svgFileNameDest)
  13. if err != nil {
  14. log.Println("err ReadImage", err)
  15. }
  16. //mw2 = mw
  17. return
  18. }
  19.  
  20. //CmdUtils.go
  21. package CmdUtils
  22.  
  23. import (
  24. "strings"
  25. "os/exec"
  26. "regexp"
  27. )
  28.  
  29. func CmdExec(cmd_str string) (err error) {
  30.  
  31. //过滤多余空格,然后分割
  32. cmd_str = compressStr(cmd_str)
  33. args := strings.Split(cmd_str, " ")
  34. d := exec.Command(args[0], args[1:]...)
  35. err = d.Start()
  36. err = d.Wait()
  37. return err
  38.  
  39. }
  40.  
  41. func CmdSvg2Png(src_svg string, src_dest string) (err error) {
  42.  
  43. cmd_str := `gm convert -background none ` + src_svg + " " + src_dest
  44. err = CmdExec(cmd_str)
  45. return err
  46.  
  47. }
  48.  
  49. func compressStr(str string) string {
  50. if str == "" {
  51. return ""
  52. }
  53. //匹配一个或多个空白符的正则表达式
  54. reg := regexp.MustCompile("\\s+")
  55. return reg.ReplaceAllString(str, " ")
  56. }

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

Gmagick convert SVG to PNG with transparent/opacity background的更多相关文章

  1. Convert SVG to PNG in Python - Stack Overflow

    Convert SVG to PNG in Python - Stack Overflow Convert SVG to PNG in Python

  2. CairoSVG - Convert SVG to PNG or PDF - Contents

    CairoSVG - Convert SVG to PNG or PDF - Contents User Documentation Author Guillaume Ayoub Date 2011- ...

  3. how to convert SVG shapes to polygon

    how to convert SVG shapes to polygon 如何将 svg 的 rect 转换成 polygon rect.circle.ellipse.line.polyline.po ...

  4. [Tools] Convert SVG to a PDF in Node with PDFKit and SVG.js

    Given a epxress application and an svg template, we want to draw some text, date onto it and convert ...

  5. 100% opacity UILabel over a 50% opacity background (UIView?) UIView是百分之50透明而上面的UILable是100%不透明

    So right now I have a UIView with a UILabel in it. I want the background to have an opacity < 1.0 ...

  6. 用GraphicsMagick处理svg转png遇到的坑

    1前言 用GraphicsMagick处理svg转png,且背景是透明且没有黑边,由于使用虚拟机的gm版本是1.3.28导致有黑边问题且svg中path中有opacity属性时,加上+antialia ...

  7. 微信公众号 SVG长按互动

    <section class="" style="display: block;width: 100%;height:667px;overflow:hidden;m ...

  8. svg矢量图绘制以及转换为Android可用的VectorDrawable资源

    项目需要 要在快速设置面板里显示一个VoWiFi图标(为了能够区分出来图形,我把透明的背景填充为黑色了) 由于普通图片放大后容易失真,这里我们最好用矢量图(SVG(Scalable Vector Gr ...

  9. Ubuntu 下将 svg 图片转换为其他格式 (如 png)

    参考 How to Convert SVG Files to other Image Formats on Ubuntu 12.04/11.10 Ubuntu 下将 svg 图片转换为其他格式 (如 ...

随机推荐

  1. Grunt自动化构建环境搭建

    1.环境准备 需要安装Git.Node.Bower.Grunt.Ruby NodeJS https://nodejs.org/en/ Ruby    http://rubyinstaller.org/ ...

  2. Flask —— 信号(5)

    Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为. pip3 install blinker 1. 内置信号 request_started = ...

  3. php中一些容易混淆的函数总结

    在我们日常PHP开发中,经常会使用一些函数完成相关操作,但是有些函数功能相近,很容易混淆,再次总结一下 1. __DIR__  &&  getcwd() 看官方解释: getcwd: ...

  4. NOIP2001提高组复赛B 数的划分

    题目链接:https://ac.nowcoder.com/acm/contest/249/B 题目大意: 略 分析1(记忆化搜索): 方法为减而治之,把n划分成k份的答案就相当于每次把n分成a,b两个 ...

  5. java多线程中 volatile与synchronized的区别-阿里面试

    volatile 与 synchronized 的比较(阿里面试官问的问题) ①volatile轻量级,只能修饰变量.synchronized重量级,还可修饰方法 ②volatile只能保证数据的可见 ...

  6. Python——日志模块(logging)

    一.日志说明 日志是跟踪软件运行时所发生的事件的一种方法.软件开发者在代码中调用日志函数,表明发生了特定的事件.事件由描述性消息描述,该描述性消息可以可选地包含可变数据(即,对于事件的每次出现都潜在地 ...

  7. IO多路复用和local概念

    一.local 在多个线程之间使用threading.local对象,可以实现多个线程之间的数据隔离 import time import random from threading import T ...

  8. postgreSQL学习(二):pgsql的一些基础操作

    在上一篇文章中我们学习了怎么安装pgsql,安装好了后,我们来学习一下怎么对pgsql进行创建操作以及相关的crud的操作啦 一 创建数据库 $ createdb test 然后你可能会遇到如下的错误 ...

  9. Spring Cloud Data Flow 中的 ETL

    Spring Cloud Data Flow 中的 ETL 影宸风洛 程序猿DD 今天 来源:SpringForAll社区 1 概述 Spring Cloud Data Flow是一个用于构建实时数据 ...

  10. OSU! on tree

    dsu on tree 好吧,这个毒瘤...... 树剖和启发式合并的杂合体. 用于解决静态子树问题,复杂度O(nlogn * insert时间) 因为dsu是并查集的意思所以算法名字大概就是什么树上 ...