From 51ce888cef548cdeb40d7da107fe7a4e03d85d1a Mon Sep 17 00:00:00 2001 From: "a.petraki" <a.petraki@perx.ru> Date: Thu, 23 Nov 2023 12:46:14 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D1=84=D0=BE=D1=80?= =?UTF-8?q?=D0=BC=D0=B0=D1=82=D0=BE=D0=B2=20=D0=B8=D0=B7=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/images/imgconv/default_format.go | 16 +++++------ pkg/images/imgconv/imgconv.go | 42 ++++++++++++++++++---------- pkg/images/imgconv/webp.go | 2 +- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/pkg/images/imgconv/default_format.go b/pkg/images/imgconv/default_format.go index d57a9702..e8e5bd27 100644 --- a/pkg/images/imgconv/default_format.go +++ b/pkg/images/imgconv/default_format.go @@ -12,17 +12,17 @@ import ( ) const ( - JPEG = "jpeg" - PNG = "png" - GIF = "gif" - TIFF = "tiff" - BMP = "bmp" + JPEG Format = "jpeg" + PNG Format = "png" + GIF Format = "gif" + TIFF Format = "tiff" + BMP Format = "bmp" ) func init() { - RegisterFormatEncoder(JPEG, func(w io.Writer, img image.Image) error { return jpeg.Encode(w, img, nil) }) - RegisterFormatEncoder(PNG, func(w io.Writer, img image.Image) error { return png.Encode(w, img) }) + RegisterFormatEncoder(JPEG, func(w io.Writer, img image.Image) error { return jpeg.Encode(w, img, nil) }, "jpg", "jpeg") + RegisterFormatEncoder(PNG, png.Encode, "png") RegisterFormatEncoder(GIF, func(w io.Writer, img image.Image) error { return gif.Encode(w, img, nil) }) RegisterFormatEncoder(TIFF, func(w io.Writer, img image.Image) error { return tiff.Encode(w, img, nil) }) - RegisterFormatEncoder(BMP, func(w io.Writer, img image.Image) error { return bmp.Encode(w, img) }) + RegisterFormatEncoder(BMP, bmp.Encode) } diff --git a/pkg/images/imgconv/imgconv.go b/pkg/images/imgconv/imgconv.go index 9f00fcb8..7944a619 100644 --- a/pkg/images/imgconv/imgconv.go +++ b/pkg/images/imgconv/imgconv.go @@ -9,20 +9,24 @@ import ( "git.perx.ru/perxis/perxis-go/pkg/errors" ) -var builtinFormats = map[string]string{ - "jpg": "jpeg", - "tif": "tiff", -} - -var defaultFormatEncoderRegistry = make(map[string]EncodeFunc) +type ( + EncodeFunc func(w io.Writer, img image.Image) error + Format string +) -type EncodeFunc func(w io.Writer, img image.Image) error +var ( + defaultFormatEncoderRegistry = make(map[Format]EncodeFunc) + formatExtensions = make(map[string]Format) +) -func RegisterFormatEncoder(format string, fn EncodeFunc) { +func RegisterFormatEncoder(format Format, fn EncodeFunc, extensions ...string) { defaultFormatEncoderRegistry[format] = fn + for _, ext := range extensions { + formatExtensions[strings.TrimPrefix(strings.ToLower(ext), ".")] = format + } } -func Encode(w io.Writer, format string, img image.Image) error { +func Encode(w io.Writer, format Format, img image.Image) error { encoder, ok := defaultFormatEncoderRegistry[format] if !ok { return errors.Errorf("unknown format: %s", format) @@ -55,11 +59,19 @@ func Open(filename string) (image.Image, string, error) { return img, ext, nil } -func NormalizeFormat(format string) string { - format = strings.ToLower(format) - format = strings.TrimPrefix(format, ".") - if v, ok := builtinFormats[format]; ok { - return v +func FormatFromExtension(ext string) (Format, error) { + ext = strings.TrimPrefix(strings.ToLower(ext), ".") + if f, ok := formatExtensions[ext]; ok { + return f, nil } - return format + return "", errors.Errorf("unsupported format") } + +//func NormalizeFormat(format string) string { +// format = strings.ToLower(format) +// format = strings.TrimPrefix(format, ".") +// //if v, ok := builtinFormats[format]; ok { +// // return v +// //} +// return format +//} diff --git a/pkg/images/imgconv/webp.go b/pkg/images/imgconv/webp.go index 0358d9ca..f5f42e04 100644 --- a/pkg/images/imgconv/webp.go +++ b/pkg/images/imgconv/webp.go @@ -15,7 +15,7 @@ import ( ) const ( - WEBP = "webp" + WEBP Format = "webp" ) func init() { -- GitLab