mirror of
https://github.com/1f349/violet.git
synced 2024-11-22 03:11:44 +00:00
37 lines
891 B
Go
37 lines
891 B
Go
package favicons
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"os/exec"
|
|
)
|
|
|
|
// svg2png takes an input inkscape binary path and svg image bytes and outputs
|
|
// the png image bytes or an error.
|
|
func svg2png(inkscapeCmd string, in []byte) (out []byte, err error) {
|
|
// create stdout and stderr buffers
|
|
var stdout, stderr bytes.Buffer
|
|
|
|
// prepare inkscape command and attach buffers
|
|
cmd := exec.Command(inkscapeCmd, "--export-type", "png", "--export-filename", "-", "--export-background-opacity", "0", "--pipe")
|
|
cmd.Stdin = bytes.NewBuffer(in)
|
|
cmd.Stdout = &stdout
|
|
cmd.Stderr = &stderr
|
|
|
|
// run the command and return errors
|
|
if e := cmd.Run(); e != nil {
|
|
err = fmt.Errorf("%s\nSTDERR:\n%s", e.Error(), stderr.String())
|
|
return
|
|
}
|
|
|
|
// error if there is no output
|
|
if stdout.Len() == 0 {
|
|
err = fmt.Errorf("got no data from inkscape")
|
|
return
|
|
}
|
|
|
|
// return the raw bytes
|
|
out = stdout.Bytes()
|
|
return
|
|
}
|