diff --git a/ofdgo_image.go b/ofdgo_image.go index ed7dd67..cc6f239 100644 --- a/ofdgo_image.go +++ b/ofdgo_image.go @@ -21,6 +21,7 @@ import ( "image" "image/color" + canvas_image "github.com/tdewolff/canvas/image" _ "github.com/xiaoqidun/jbig2" _ "golang.org/x/image/bmp" ) @@ -29,6 +30,18 @@ import ( // 入参: data 图片数据 // 返回: image.Image 图片对象, string 图片格式, error 错误信息 func decodeImageData(data []byte) (image.Image, string, error) { + if _, format, err := image.DecodeConfig(bytes.NewReader(data)); err == nil { + switch format { + case "jpeg": + if img, err := canvas_image.NewJPEGImage(bytes.NewReader(data)); err == nil { + return img, format, nil + } + case "png": + if img, err := canvas_image.NewPNGImage(bytes.NewReader(data)); err == nil { + return img, format, nil + } + } + } img, format, err := image.Decode(bytes.NewReader(data)) if err == nil { return img, normalizeSealType(format), nil diff --git a/ofdgo_renderer_image.go b/ofdgo_renderer_image.go index 75eea20..a525026 100644 --- a/ofdgo_renderer_image.go +++ b/ofdgo_renderer_image.go @@ -19,6 +19,7 @@ import ( "image/color" "github.com/tdewolff/canvas" + canvas_image "github.com/tdewolff/canvas/image" ) // renderImage 渲染图片 @@ -112,6 +113,9 @@ func imageWithTransparentEdge(img image.Image) (image.Image, int) { if w == 0 || h == 0 { return img, 0 } + if src, ok := img.(*canvas_image.Image); ok && src.Mimetype == "image/jpeg" && src.Mask == nil { + return img, 0 + } if opaque, ok := img.(interface{ Opaque() bool }); ok && opaque.Opaque() { return img, 0 }