From 26a7e35f2777b8424477eef1838125a6ae55fe48 Mon Sep 17 00:00:00 2001 From: Wim Date: Wed, 27 Feb 2019 00:41:50 +0100 Subject: Add MediaConvertWebPToPNG option (telegram). (#741) * Add MediaConvertWebPToPNG option (telegram). When enabled matterbridge will convert .webp files to .png files before uploading them to the mediaserver of the other bridges. Fixes #398 --- bridge/helper/helper.go | 19 +++++++++++++++++++ bridge/helper/helper_test.go | 21 +++++++++++++++++++++ 2 files changed, 40 insertions(+) (limited to 'bridge/helper') diff --git a/bridge/helper/helper.go b/bridge/helper/helper.go index 3836556f..c336fd13 100644 --- a/bridge/helper/helper.go +++ b/bridge/helper/helper.go @@ -3,6 +3,7 @@ package helper import ( "bytes" "fmt" + "image/png" "io" "net/http" "regexp" @@ -10,6 +11,8 @@ import ( "time" "unicode/utf8" + "golang.org/x/image/webp" + "github.com/42wim/matterbridge/bridge/config" "github.com/sirupsen/logrus" "gitlab.com/golang-commonmark/markdown" @@ -177,3 +180,19 @@ func ParseMarkdown(input string) string { md := markdown.New(markdown.XHTMLOutput(true), markdown.Breaks(true)) return (md.RenderToString([]byte(input))) } + +// ConvertWebPToPNG convert input data (which should be WebP format to PNG format) +func ConvertWebPToPNG(data *[]byte) error { + r := bytes.NewReader(*data) + m, err := webp.Decode(r) + if err != nil { + return err + } + var output []byte + w := bytes.NewBuffer(output) + if err := png.Encode(w, m); err != nil { + return err + } + *data = w.Bytes() + return nil +} diff --git a/bridge/helper/helper_test.go b/bridge/helper/helper_test.go index 1770acd9..48f33b10 100644 --- a/bridge/helper/helper_test.go +++ b/bridge/helper/helper_test.go @@ -1,6 +1,8 @@ package helper import ( + "io/ioutil" + "os" "testing" "github.com/stretchr/testify/assert" @@ -103,3 +105,22 @@ func TestGetSubLines(t *testing.T) { assert.Equalf(t, testcase.nonSplitOutput, nonSplitLines, "'%s' testcase should give expected lines without splitting.", testname) } } + +func TestConvertWebPToPNG(t *testing.T) { + if os.Getenv("LOCAL_TEST") == "" { + t.Skip() + } + input, err := ioutil.ReadFile("test.webp") + if err != nil { + t.Fail() + } + d := &input + err = ConvertWebPToPNG(d) + if err != nil { + t.Fail() + } + err = ioutil.WriteFile("test.png", *d, 0644) + if err != nil { + t.Fail() + } +} -- cgit v1.2.3