generate animated thumbnails for animated gifs

This commit is contained in:
David Christofas
2022-03-04 19:13:48 +01:00
parent 0849563810
commit d6182a4ea1
11 changed files with 223 additions and 79 deletions
+16 -3
View File
@@ -4,6 +4,7 @@ import (
"bufio"
"image"
"image/draw"
"image/gif"
"io"
"math"
"mime"
@@ -16,12 +17,12 @@ import (
)
type FileConverter interface {
Convert(r io.Reader) (image.Image, error)
Convert(r io.Reader) (interface{}, error)
}
type ImageDecoder struct{}
func (i ImageDecoder) Convert(r io.Reader) (image.Image, error) {
func (i ImageDecoder) Convert(r io.Reader) (interface{}, error) {
img, _, err := image.Decode(r)
if err != nil {
return nil, errors.Wrap(err, `could not decode the image`)
@@ -29,11 +30,21 @@ func (i ImageDecoder) Convert(r io.Reader) (image.Image, error) {
return img, nil
}
type GifDecoder struct{}
func (i GifDecoder) Convert(r io.Reader) (interface{}, error) {
img, err := gif.DecodeAll(r)
if err != nil {
return nil, errors.Wrap(err, `could not decode the image`)
}
return img, nil
}
type TxtToImageConverter struct {
fontLoader *FontLoader
}
func (t TxtToImageConverter) Convert(r io.Reader) (image.Image, error) {
func (t TxtToImageConverter) Convert(r io.Reader) (interface{}, error) {
img := image.NewRGBA(image.Rect(0, 0, 640, 480))
imgBounds := img.Bounds()
@@ -183,6 +194,8 @@ func ForType(mimeType string, opts map[string]interface{}) FileConverter {
return TxtToImageConverter{
fontLoader: fontLoader,
}
case "image/gif":
return GifDecoder{}
default:
return ImageDecoder{}
}