MCPcopy Create free account
hub / github.com/aurora-develop/aurora / imageEditDecodeDataURL

Function imageEditDecodeDataURL

initialize/handlers.go:983–1024  ·  view source on GitHub ↗

imageEditDecodeDataURL 解析 data:image/...;base64,XXXX 形式的 URL。

(url string)

Source from the content-addressed store, hash-verified

981
982// imageEditDecodeDataURL 解析 data:image/...;base64,XXXX 形式的 URL。
983func imageEditDecodeDataURL(url string) (editImageInput, error) {
984 comma := strings.Index(url, ",")
985 if comma < 0 {
986 return editImageInput{}, fmt.Errorf("invalid data URL")
987 }
988 header := url[:comma]
989 payload := url[comma+1:]
990 contentType := "image/png"
991 if semi := strings.Index(header, ";"); semi > 5 {
992 // 形如 data:image/png;base64
993 contentType = header[5:semi]
994 if !strings.HasPrefix(contentType, "image/") {
995 return editImageInput{}, fmt.Errorf("data URL must be an image, got %q", contentType)
996 }
997 }
998 // 简单 base64 解码;若包含 URL 编码等其他格式,退回 base64.URLEncoding
999 dec := base64.StdEncoding
1000 if strings.Contains(header, ";base64") {
1001 dec = base64.StdEncoding
1002 } else {
1003 dec = base64.URLEncoding
1004 }
1005 raw, err := dec.DecodeString(payload)
1006 if err != nil {
1007 // 兜底再用 StdEncoding 试一次,容忍格式不严格的输入
1008 raw, err = base64.StdEncoding.DecodeString(payload)
1009 if err != nil {
1010 return editImageInput{}, err
1011 }
1012 contentType = "image/png"
1013 }
1014 ext := "png"
1015 switch strings.ToLower(contentType) {
1016 case "image/jpeg":
1017 ext = "jpg"
1018 case "image/gif":
1019 ext = "gif"
1020 case "image/webp":
1021 ext = "webp"
1022 }
1023 return imageEditReadJSONImage(raw, "image_url."+ext, contentType)
1024}
1025
1026// imageEditDownloadHTTPURL 下载一个 https/http 图片并包装为 editImageInput。
1027func imageEditDownloadHTTPURL(client httpclient.AuroraHttpClient, url string) (editImageInput, error) {

Callers 1

imageEditConvertURLFunction · 0.85

Calls 1

imageEditReadJSONImageFunction · 0.85

Tested by

no test coverage detected