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()
- 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(有效)
Gmagick convert SVG to PNG with transparent/opacity background的更多相关文章
- Convert SVG to PNG in Python - Stack Overflow
Convert SVG to PNG in Python - Stack Overflow Convert SVG to PNG in Python
- CairoSVG - Convert SVG to PNG or PDF - Contents
CairoSVG - Convert SVG to PNG or PDF - Contents User Documentation Author Guillaume Ayoub Date 2011- ...
- how to convert SVG shapes to polygon
how to convert SVG shapes to polygon 如何将 svg 的 rect 转换成 polygon rect.circle.ellipse.line.polyline.po ...
- [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 ...
- 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 ...
- 用GraphicsMagick处理svg转png遇到的坑
1前言 用GraphicsMagick处理svg转png,且背景是透明且没有黑边,由于使用虚拟机的gm版本是1.3.28导致有黑边问题且svg中path中有opacity属性时,加上+antialia ...
- 微信公众号 SVG长按互动
<section class="" style="display: block;width: 100%;height:667px;overflow:hidden;m ...
- svg矢量图绘制以及转换为Android可用的VectorDrawable资源
项目需要 要在快速设置面板里显示一个VoWiFi图标(为了能够区分出来图形,我把透明的背景填充为黑色了) 由于普通图片放大后容易失真,这里我们最好用矢量图(SVG(Scalable Vector Gr ...
- Ubuntu 下将 svg 图片转换为其他格式 (如 png)
参考 How to Convert SVG Files to other Image Formats on Ubuntu 12.04/11.10 Ubuntu 下将 svg 图片转换为其他格式 (如 ...
随机推荐
- Grunt自动化构建环境搭建
1.环境准备 需要安装Git.Node.Bower.Grunt.Ruby NodeJS https://nodejs.org/en/ Ruby http://rubyinstaller.org/ ...
- Flask —— 信号(5)
Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为. pip3 install blinker 1. 内置信号 request_started = ...
- php中一些容易混淆的函数总结
在我们日常PHP开发中,经常会使用一些函数完成相关操作,但是有些函数功能相近,很容易混淆,再次总结一下 1. __DIR__ && getcwd() 看官方解释: getcwd: ...
- NOIP2001提高组复赛B 数的划分
题目链接:https://ac.nowcoder.com/acm/contest/249/B 题目大意: 略 分析1(记忆化搜索): 方法为减而治之,把n划分成k份的答案就相当于每次把n分成a,b两个 ...
- java多线程中 volatile与synchronized的区别-阿里面试
volatile 与 synchronized 的比较(阿里面试官问的问题) ①volatile轻量级,只能修饰变量.synchronized重量级,还可修饰方法 ②volatile只能保证数据的可见 ...
- Python——日志模块(logging)
一.日志说明 日志是跟踪软件运行时所发生的事件的一种方法.软件开发者在代码中调用日志函数,表明发生了特定的事件.事件由描述性消息描述,该描述性消息可以可选地包含可变数据(即,对于事件的每次出现都潜在地 ...
- IO多路复用和local概念
一.local 在多个线程之间使用threading.local对象,可以实现多个线程之间的数据隔离 import time import random from threading import T ...
- postgreSQL学习(二):pgsql的一些基础操作
在上一篇文章中我们学习了怎么安装pgsql,安装好了后,我们来学习一下怎么对pgsql进行创建操作以及相关的crud的操作啦 一 创建数据库 $ createdb test 然后你可能会遇到如下的错误 ...
- Spring Cloud Data Flow 中的 ETL
Spring Cloud Data Flow 中的 ETL 影宸风洛 程序猿DD 今天 来源:SpringForAll社区 1 概述 Spring Cloud Data Flow是一个用于构建实时数据 ...
- OSU! on tree
dsu on tree 好吧,这个毒瘤...... 树剖和启发式合并的杂合体. 用于解决静态子树问题,复杂度O(nlogn * insert时间) 因为dsu是并查集的意思所以算法名字大概就是什么树上 ...