Skip to content
Snippets Groups Projects
Commit 51ce888c authored by Alena Petraki's avatar Alena Petraki :nail_care_tone1:
Browse files

Добавлена регистрация расширений для форматов изображений

parent 2b0a29fb
No related branches found
No related tags found
No related merge requests found
...@@ -12,17 +12,17 @@ import ( ...@@ -12,17 +12,17 @@ import (
) )
const ( const (
JPEG = "jpeg" JPEG Format = "jpeg"
PNG = "png" PNG Format = "png"
GIF = "gif" GIF Format = "gif"
TIFF = "tiff" TIFF Format = "tiff"
BMP = "bmp" BMP Format = "bmp"
) )
func init() { func init() {
RegisterFormatEncoder(JPEG, func(w io.Writer, img image.Image) error { return jpeg.Encode(w, img, nil) }) RegisterFormatEncoder(JPEG, func(w io.Writer, img image.Image) error { return jpeg.Encode(w, img, nil) }, "jpg", "jpeg")
RegisterFormatEncoder(PNG, func(w io.Writer, img image.Image) error { return png.Encode(w, img) }) RegisterFormatEncoder(PNG, png.Encode, "png")
RegisterFormatEncoder(GIF, func(w io.Writer, img image.Image) error { return gif.Encode(w, img, nil) }) 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(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)
} }
...@@ -9,20 +9,24 @@ import ( ...@@ -9,20 +9,24 @@ import (
"git.perx.ru/perxis/perxis-go/pkg/errors" "git.perx.ru/perxis/perxis-go/pkg/errors"
) )
var builtinFormats = map[string]string{ type (
"jpg": "jpeg", EncodeFunc func(w io.Writer, img image.Image) error
"tif": "tiff", Format string
} )
var defaultFormatEncoderRegistry = make(map[string]EncodeFunc)
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 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] encoder, ok := defaultFormatEncoderRegistry[format]
if !ok { if !ok {
return errors.Errorf("unknown format: %s", format) return errors.Errorf("unknown format: %s", format)
...@@ -55,11 +59,19 @@ func Open(filename string) (image.Image, string, error) { ...@@ -55,11 +59,19 @@ func Open(filename string) (image.Image, string, error) {
return img, ext, nil return img, ext, nil
} }
func NormalizeFormat(format string) string { func FormatFromExtension(ext string) (Format, error) {
format = strings.ToLower(format) ext = strings.TrimPrefix(strings.ToLower(ext), ".")
format = strings.TrimPrefix(format, ".") if f, ok := formatExtensions[ext]; ok {
if v, ok := builtinFormats[format]; ok { return f, nil
return v
} }
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
//}
...@@ -15,7 +15,7 @@ import ( ...@@ -15,7 +15,7 @@ import (
) )
const ( const (
WEBP = "webp" WEBP Format = "webp"
) )
func init() { func init() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment