在GO中将gif图像转换为base64



我试图通过UDP发送一个gif文件,我认为最简单的方法是将gif图像转换为base64字符串并发送它,但是当我将文件字节转换为base64时,它返回一个空字符串,我已经尝试了模块"使用下面的代码:

bd := chilkat.NewBinData()
success := bd.LoadFile(path.Join(folderPath, "final.gif"))
if success != true {
panic("Fail!")
bd.DisposeBinData()
return
}
b64Data := *bd.GetEncoded("base64")

但它不工作,如果有人可以帮助我

我建议使用标准库中的encoding/base64包。

您很可能想将其转换或附加到表示您想要发送的UDP数据包的[]byte片中。

下面是一些将文件路径或io.Reader编码为[]byte的示例:


import (
"bytes"
"encoding/base64"
"io"
"os"
)
func EncodePath(path string) ([]byte, error) {
data, err := os.ReadFile(path)
if err != nil {
return nil, err
}
output := make([]byte, base64.StdEncoding.EncodedLen(len(data)))
base64.StdEncoding.Encode(output, data)
return output, nil
}
func EncodeReader(rd io.Reader) ([]byte, error) {
var b bytes.Buffer
enc := base64.NewEncoder(base64.StdEncoding, &b)
if _, err := io.Copy(enc, rd); err != nil {
return nil, err
}
if err := enc.Close(); err != nil {
return nil, err
}
return b.Bytes(), nil
}

我的解决方案是:

var buff bytes.Buffer
gif.EncodeAll(&buff, &anim)
based := base64.StdEncoding.EncodeToString(buff.Bytes())

但是base64字符串显然太长了,无法在UDP中发送,所以正确发送的解决方案是:

encoded := recordScreenToGIF(seconds) // Record X seconds of screen, & convert the result into a base64 GIF
splited := SplitSubN(encoded, 10000) // Split "encoded" each 10K characters
conn.Write([]byte(strconv.Itoa(len(splited))))
for _, elm := range splited {
_, err = conn.Write([]byte(elm))
if err != nil {
panic(err)
}
time.Sleep(50 * time.Millisecond)
}
conn.Write([]byte("Done"))

最新更新