diff --git a/pkg/images/imgconv/default_format.go b/pkg/images/imgconv/default_format.go index d57a97020ec815d19471cfffa6125c1db6acb166..e8e5bd27458994ae7d742689b347a8ad559f126c 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 9f00fcb8676bffeda1fc9de3883adf4b806c1fba..7944a619ca98bf10c77eb9b7a444984a194638fe 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 0358d9ca76240229ac274e3e5751e332dd378127..f5f42e0454e913faf98f68f19914da8a4f40e8ad 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() {