aboutsummaryrefslogtreecommitdiff
path: root/pkg/fileop/thumbnail.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/fileop/thumbnail.go')
-rw-r--r--pkg/fileop/thumbnail.go49
1 files changed, 22 insertions, 27 deletions
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
-
}