summaryrefslogtreecommitdiff
path: root/internal/media
diff options
context:
space:
mode:
authorLibravatar Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>2022-12-06 14:15:25 +0100
committerLibravatar GitHub <noreply@github.com>2022-12-06 14:15:25 +0100
commit1a3f26fb5c515f5672561449f91f6be6383b5a3a (patch)
tree801c8469ea8ae122cf583953940d3e28bdbfa90f /internal/media
parent[docs] Remove filesystem logging directives from example systemd unit config ... (diff)
downloadgotosocial-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.go7
-rw-r--r--internal/media/processingmedia.go4
-rw-r--r--internal/media/types.go3
-rw-r--r--internal/media/util.go2
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 {