mirror of
https://github.com/fishtailstudio/imgo
synced 2025-09-26 20:41:47 +08:00
55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
package imgo
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/base64"
|
|
"image/png"
|
|
"strings"
|
|
)
|
|
|
|
// ToBase64 returns the base64 encoded string of the image.
|
|
func (i Image) ToBase64() string {
|
|
buff := bytes.NewBuffer(nil)
|
|
err := png.Encode(buff, i.image)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return "data:image/png;base64," + base64.StdEncoding.EncodeToString(buff.Bytes())
|
|
}
|
|
|
|
// LoadFromBase64 loads an image from a base64 encoded string.
|
|
func LoadFromBase64(base64Str string) (i *Image) {
|
|
i = &Image{}
|
|
base64Str = strings.Split(base64Str, ",")[1]
|
|
|
|
// Decode the base64 string
|
|
decodeString, err := base64.StdEncoding.DecodeString(base64Str)
|
|
if err != nil {
|
|
i.addError(err)
|
|
return
|
|
}
|
|
|
|
// Get the extension, mimetype and corresponding decoder function of the image.
|
|
ext, mimetype, decoder, err := GetImageType(decodeString[:8])
|
|
if err != nil {
|
|
i.addError(err)
|
|
return
|
|
}
|
|
|
|
// Decode the image.
|
|
buff := bytes.NewBuffer(decodeString)
|
|
img, err := decoder(buff)
|
|
if err != nil {
|
|
i.addError(err)
|
|
return
|
|
}
|
|
|
|
return &Image{
|
|
image: Image2RGBA(img),
|
|
width: img.Bounds().Dx(),
|
|
height: img.Bounds().Dy(),
|
|
extension: ext,
|
|
mimetype: mimetype,
|
|
}
|
|
}
|