[feature] use webp for thumbnails (#3116)

* update to use webp for thumbnails

* bump webp quality up to 40% from 12% (it's a bit different to jpeg quality setting)

* update to use yuva colorspace, and use thumbnail=n=10 to select frame

* fix missing comma in ffmpeg args

* add links to appropriate ffmpeg docs

* update tests

* add file size tests for thumbnails

---------

Co-authored-by: tobi <tobi.smethurst@protonmail.com>
This commit is contained in:
kim 2024-07-19 15:28:43 +00:00 committed by GitHub
commit 50c9b5498b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
72 changed files with 4496 additions and 225 deletions

View file

@ -22,13 +22,15 @@ import (
"errors"
"fmt"
"image"
"image/jpeg"
"io"
"os"
"golang.org/x/image/webp"
"codeberg.org/gruf/go-bytesize"
"codeberg.org/gruf/go-iotools"
"codeberg.org/gruf/go-mimetypes"
"github.com/buckket/go-blurhash"
"github.com/disintegration/imaging"
)
@ -63,8 +65,8 @@ func thumbSize(width, height int) (int, int) {
}
}
// jpegDecode decodes the JPEG at filepath into parsed image.Image.
func jpegDecode(filepath string) (image.Image, error) {
// webpDecode decodes the WebP at filepath into parsed image.Image.
func webpDecode(filepath string) (image.Image, error) {
// Open the file at given path.
file, err := os.Open(filepath)
if err != nil {
@ -72,7 +74,7 @@ func jpegDecode(filepath string) (image.Image, error) {
}
// Decode image from file.
img, err := jpeg.Decode(file)
img, err := webp.Decode(file)
// Done with file.
_ = file.Close()
@ -83,7 +85,7 @@ func jpegDecode(filepath string) (image.Image, error) {
// generateBlurhash generates a blurhash for JPEG at filepath.
func generateBlurhash(filepath string) (string, error) {
// Decode JPEG file at given path.
img, err := jpegDecode(filepath)
img, err := webpDecode(filepath)
if err != nil {
return "", err
}