diff options
author | 2022-12-06 14:15:25 +0100 | |
---|---|---|
committer | 2022-12-06 14:15:25 +0100 | |
commit | 1a3f26fb5c515f5672561449f91f6be6383b5a3a (patch) | |
tree | 801c8469ea8ae122cf583953940d3e28bdbfa90f /internal/media | |
parent | [docs] Remove filesystem logging directives from example systemd unit config ... (diff) | |
download | gotosocial-1a3f26fb5c515f5672561449f91f6be6383b5a3a.tar.xz |
[feature] media: add webp support (#1155)
* media: add webp support
Signed-off-by: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
* bump exif-terminator to v0.5.0
Signed-off-by: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
Signed-off-by: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
Diffstat (limited to 'internal/media')
-rw-r--r-- | internal/media/image.go | 7 | ||||
-rw-r--r-- | internal/media/processingmedia.go | 4 | ||||
-rw-r--r-- | internal/media/types.go | 3 | ||||
-rw-r--r-- | internal/media/util.go | 2 |
4 files changed, 11 insertions, 5 deletions
diff --git a/internal/media/image.go b/internal/media/image.go index e1fc5c331..b095a6c49 100644 --- a/internal/media/image.go +++ b/internal/media/image.go @@ -30,6 +30,7 @@ import ( "github.com/buckket/go-blurhash" "github.com/disintegration/imaging" + _ "golang.org/x/image/webp" // blank import to support WebP decoding ) const ( @@ -71,7 +72,7 @@ func decodeImage(r io.Reader, contentType string) (*imageMeta, error) { var err error switch contentType { - case mimeImageJpeg: + case mimeImageJpeg, mimeImageWebp: i, err = imaging.Decode(r, imaging.AutoOrientation(true)) case mimeImagePng: strippedPngReader := io.Reader(&PNGAncillaryChunkStripper{ @@ -104,7 +105,7 @@ func decodeImage(r io.Reader, contentType string) (*imageMeta, error) { } // deriveThumbnail returns a byte slice and metadata for a thumbnail -// of a given jpeg, png, or gif, or an error if something goes wrong. +// of a given jpeg, png, gif or webp, or an error if something goes wrong. // // If createBlurhash is true, then a blurhash will also be generated from a tiny // version of the image. This costs precious CPU cycles, so only use it if you @@ -117,7 +118,7 @@ func deriveThumbnail(r io.Reader, contentType string, createBlurhash bool) (*ima var err error switch contentType { - case mimeImageJpeg, mimeImageGif: + case mimeImageJpeg, mimeImageGif, mimeImageWebp: i, err = imaging.Decode(r, imaging.AutoOrientation(true)) case mimeImagePng: strippedPngReader := io.Reader(&PNGAncillaryChunkStripper{ diff --git a/internal/media/processingmedia.go b/internal/media/processingmedia.go index 81eef2f84..1fd9423f5 100644 --- a/internal/media/processingmedia.go +++ b/internal/media/processingmedia.go @@ -215,7 +215,7 @@ func (p *ProcessingMedia) loadFullSize(ctx context.Context) error { // decode the image ct := p.attachment.File.ContentType switch ct { - case mimeImageJpeg, mimeImagePng: + case mimeImageJpeg, mimeImagePng, mimeImageWebp: decoded, err = decodeImage(stored, ct) case mimeImageGif: decoded, err = decodeGif(stored) @@ -319,7 +319,7 @@ func (p *ProcessingMedia) store(ctx context.Context) error { p.attachment.Type = gtsmodel.FileTypeImage // nothing to terminate, we can just store the multireader readerToStore = multiReader - case mimeJpeg, mimePng: + case mimeJpeg, mimePng, mimeWebp: p.attachment.Type = gtsmodel.FileTypeImage if fileSize > 0 { terminated, err := terminator.Terminate(multiReader, int(fileSize), extension) diff --git a/internal/media/types.go b/internal/media/types.go index 763a8137f..b855d72b5 100644 --- a/internal/media/types.go +++ b/internal/media/types.go @@ -43,6 +43,9 @@ const ( mimePng = "png" mimeImagePng = mimeImage + "/" + mimePng + + mimeWebp = "webp" + mimeImageWebp = mimeImage + "/" + mimeWebp ) type processState int32 diff --git a/internal/media/util.go b/internal/media/util.go index 316d63dec..7efd788a1 100644 --- a/internal/media/util.go +++ b/internal/media/util.go @@ -37,6 +37,7 @@ func AllSupportedMIMETypes() []string { mimeImageJpeg, mimeImageGif, mimeImagePng, + mimeImageWebp, } } @@ -68,6 +69,7 @@ func supportedImage(mimeType string) bool { mimeImageJpeg, mimeImageGif, mimeImagePng, + mimeImageWebp, } for _, accepted := range acceptedImageTypes { if mimeType == accepted { |