48 lines
993 B
Go
48 lines
993 B
Go
package image
|
|
|
|
import (
|
|
"image"
|
|
_ "image/gif"
|
|
_ "image/jpeg"
|
|
_ "image/png"
|
|
"net/http"
|
|
"regexp"
|
|
"strings"
|
|
|
|
_ "golang.org/x/image/webp"
|
|
)
|
|
|
|
func GetImageSizeFromUrl(url string) (width int, height int, err error) {
|
|
resp, err := http.Get(url)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
img, _, err := image.DecodeConfig(resp.Body)
|
|
if err != nil {
|
|
return
|
|
}
|
|
return img.Width, img.Height, nil
|
|
}
|
|
|
|
var (
|
|
reg = regexp.MustCompile(`data:image/([^;]+);base64,`)
|
|
)
|
|
|
|
func GetImageSizeFromBase64(encoded string) (width int, height int, err error) {
|
|
encoded = strings.TrimPrefix(encoded, "data:image/png;base64,")
|
|
base64 := strings.NewReader(reg.ReplaceAllString(encoded, ""))
|
|
img, _, err := image.DecodeConfig(base64)
|
|
if err != nil {
|
|
return
|
|
}
|
|
return img.Width, img.Height, nil
|
|
}
|
|
|
|
func GetImageSize(image string) (width int, height int, err error) {
|
|
if strings.HasPrefix(image, "data:image/") {
|
|
return GetImageSizeFromBase64(image)
|
|
}
|
|
return GetImageSizeFromUrl(image)
|
|
}
|