From c2d666b43477ea7042b574ad940c508216cb0e83 Mon Sep 17 00:00:00 2001 From: Gabriel Arakaki Giovanini Date: Mon, 3 Jul 2023 23:13:04 +0200 Subject: fix: Fix content type Content type was always being set to `text/html`. Also swap lib for processing thumbnail for something that accepts HEIC. --- pkg/fileop/file.go | 5 ++++- pkg/fileop/thumbnail.go | 49 ++++++++++++++++++++++--------------------------- 2 files changed, 26 insertions(+), 28 deletions(-) (limited to 'pkg/fileop') diff --git a/pkg/fileop/file.go b/pkg/fileop/file.go index 07c08e5..10e2202 100644 --- a/pkg/fileop/file.go +++ b/pkg/fileop/file.go @@ -12,6 +12,9 @@ func GetHashFromPath(path string) string { } func IsMimeTypeSupported(mimetype string) bool { - return strings.HasPrefix(mimetype, "video") && + if mimetype == "image/svg+xml" { + return false + } + return strings.HasPrefix(mimetype, "video") || strings.HasPrefix(mimetype, "image") } diff --git a/pkg/fileop/thumbnail.go b/pkg/fileop/thumbnail.go index 32f6064..fcdfa12 100644 --- a/pkg/fileop/thumbnail.go +++ b/pkg/fileop/thumbnail.go @@ -1,60 +1,55 @@ package fileop import ( - "image" - "image/jpeg" - "os" + "bytes" + "fmt" "os/exec" + "strconv" - "github.com/disintegration/imaging" + "github.com/h2non/bimg" ) func EncodeImageThumbnail(inputPath string, outputPath string, width, height int) error { - inputImage, err := imaging.Open(inputPath, imaging.AutoOrientation(true)) + buffer, err := bimg.Read(inputPath) if err != nil { return err } - thumbImage := imaging.Fit(inputImage, width, height, imaging.Lanczos) - if err = encodeImageJPEG(thumbImage, outputPath, 60); err != nil { - return err - } - - return nil -} - -func encodeImageJPEG(image image.Image, outputPath string, jpegQuality int) error { - photo_file, err := os.Create(outputPath) - if err != nil { - return err + options := bimg.Options{ + Width: width, + Height: height, + Embed: true, + Type: bimg.JPEG, + StripMetadata: true, } - defer photo_file.Close() - err = jpeg.Encode(photo_file, image, &jpeg.Options{Quality: jpegQuality}) + newImage, err := bimg.NewImage(buffer).Process(options) if err != nil { return err } - return nil + return bimg.Write(outputPath, newImage) } -func EncodeVideoThumbnail(inputPath string, outputPath string, width, height int) error { +func EncodeVideoThumbnail(inputPath string, outputPath string, width, _ int) error { args := []string{ "-i", inputPath, - "-vframes", "1", // output one frame - "-an", // disable audio - "-vf", "scale='min(1024,iw)':'min(1024,ih)':force_original_aspect_ratio=decrease:force_divisible_by=2", - "-vf", "select=gte(n\\,100)", + "-y", + "-vframes", "1", + "-q:v", "1", + "-vf", "thumbnail,scale=" + strconv.Itoa(width) + ":-1", outputPath, } cmd := exec.Command("ffmpeg", args...) + var b bytes.Buffer + cmd.Stderr = &b + if err := cmd.Run(); err != nil { - return err + return fmt.Errorf("%s; %w", b.String(), err) } return nil - } -- cgit v1.2.3