image: Fix convert endpoint (#274)

This commit is contained in:
Janos Dobronszki
2021-11-17 10:27:21 +00:00
committed by GitHub
parent dcdbccd54f
commit 64525fd630

View File

@@ -224,6 +224,8 @@ func (e *Image) Convert(ctx context.Context, req *img.ConvertRequest, rsp *img.C
var srcImage image.Image var srcImage image.Image
var imageBytes []byte var imageBytes []byte
var err error var err error
var ext string
if len(req.File) > 0 { if len(req.File) > 0 {
imageBytes = req.File imageBytes = req.File
} else if len(req.Base64) > 0 { } else if len(req.Base64) > 0 {
@@ -232,11 +234,10 @@ func (e *Image) Convert(ctx context.Context, req *img.ConvertRequest, rsp *img.C
return err return err
} }
} else if len(req.Url) > 0 { } else if len(req.Url) > 0 {
_, err := url.Parse(req.Url) ur, err := url.Parse(req.Url)
if err != nil { if err != nil {
return err return err
} }
response, err := http.Get(req.Url) response, err := http.Get(req.Url)
if err != nil { if err != nil {
return err return err
@@ -246,6 +247,12 @@ func (e *Image) Convert(ctx context.Context, req *img.ConvertRequest, rsp *img.C
if err != nil { if err != nil {
return err return err
} }
switch {
case strings.HasSuffix(ur.Path, ".png"):
ext = "png"
case strings.HasSuffix(ur.Path, ".jpg") || strings.HasSuffix(ur.Path, ".jpeg"):
ext = "jpg"
}
} else { } else {
return merrors.BadRequest("image.Convert", "Must pass either base64, url, or file param") return merrors.BadRequest("image.Convert", "Must pass either base64, url, or file param")
} }
@@ -261,6 +268,10 @@ func (e *Image) Convert(ctx context.Context, req *img.ConvertRequest, rsp *img.C
err = png.Encode(buf, srcImage) err = png.Encode(buf, srcImage)
case strings.HasSuffix(req.Name, ".jpg") || strings.HasSuffix(req.Url, ".jpeg"): case strings.HasSuffix(req.Name, ".jpg") || strings.HasSuffix(req.Url, ".jpeg"):
err = jpeg.Encode(buf, srcImage, nil) err = jpeg.Encode(buf, srcImage, nil)
case strings.HasSuffix(req.Url, ".png"):
err = png.Encode(buf, srcImage)
case strings.HasSuffix(req.Url, ".jpg") || strings.HasSuffix(req.Url, ".jpeg"):
err = jpeg.Encode(buf, srcImage, nil)
} }
if err != nil { if err != nil {
@@ -273,12 +284,11 @@ func (e *Image) Convert(ctx context.Context, req *img.ConvertRequest, rsp *img.C
} }
rsp.Url = fmt.Sprintf("%v/%v/%v/%v/%v", e.hostPrefix, "micro", "images", tenantID, req.Name) rsp.Url = fmt.Sprintf("%v/%v/%v/%v/%v", e.hostPrefix, "micro", "images", tenantID, req.Name)
} else { } else {
src := buf.Bytes() prefix := "data:image/png;base64, "
length := base64.StdEncoding.EncodedLen(len(src)) if ext == "jpg" {
dst := make([]byte, length) prefix = "data:image/jpg;base64, "
base64.StdEncoding.Encode(dst, src) }
rsp.Base64 = prefix + base64.StdEncoding.EncodeToString(buf.Bytes())
rsp.Base64 = string(dst)
return nil return nil
} }
return nil return nil