From 64fb152c3699f189f51fd9c2171c846c5da67f9b Mon Sep 17 00:00:00 2001 From: Milan Nikolic Date: Sat, 4 Mar 2023 10:27:01 +0100 Subject: [PATCH] Cover format, issue #18 --- README.md | 4 +++- cbconvert.go | 30 ++++++++++++++---------------- cmd/cbconvert/main.go | 1 + 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 8699f18..68bce2b 100644 --- a/README.md +++ b/README.md @@ -113,8 +113,10 @@ This is what it looks like in the PCManFM file manager:             Image height (default "0")         --fit             Best fit for required width and height (default "false") +        --format +            Image format, valid values are jpeg, png, tiff, bmp, webp, avif (default "jpeg")         --quality -            JPEG image quality (default "75") +            Image quality (default "75")         --filter             0=NearestNeighbor, 1=Box, 2=Linear, 3=MitchellNetravali, 4=CatmullRom, 6=Gaussian, 7=Lanczos (default "2")         --outdir diff --git a/cbconvert.go b/cbconvert.go index e164b9c..aab279c 100644 --- a/cbconvert.go +++ b/cbconvert.go @@ -166,12 +166,11 @@ func (c *Convertor) convertImage(ctx context.Context, img image.Image, index int c.OnProgress() } - var ext = c.Opts.Format var fileName string if pathName != "" { - fileName = filepath.Join(c.Workdir, fmt.Sprintf("%s.%s", c.baseNoExt(pathName), ext)) + fileName = filepath.Join(c.Workdir, fmt.Sprintf("%s.%s", c.baseNoExt(pathName), c.Opts.Format)) } else { - fileName = filepath.Join(c.Workdir, fmt.Sprintf("%03d.%s", index, ext)) + fileName = filepath.Join(c.Workdir, fmt.Sprintf("%03d.%s", index, c.Opts.Format)) } img = c.transformImage(img) @@ -1136,20 +1135,19 @@ func (c *Convertor) ExtractCover(fileName string, fileInfo os.FileInfo) error { } } - fname := filepath.Join(c.Opts.Outdir, fmt.Sprintf("%s.jpg", c.baseNoExt(fileName))) - file, err := os.Create(fname) - if err != nil { - return fmt.Errorf("extractCover: %w", err) - } + fName := filepath.Join(c.Opts.Outdir, fmt.Sprintf("%s.%s", c.baseNoExt(fileName), c.Opts.Format)) - err = jpeg.Encode(file, cover, &jpeg.Options{Quality: c.Opts.Quality}) - if err != nil { - return fmt.Errorf("extractCover: %w", err) - } - - err = file.Close() - if err != nil { - return fmt.Errorf("extractCover: %w", err) + switch c.Opts.Format { + case "jpeg", "png", "tiff", "webp", "avif": + err = c.encodeImage(cover, fName) + if err != nil { + return err + } + case "bmp": + err = c.encodeIM(cover, fName) + if err != nil { + return err + } } return nil diff --git a/cmd/cbconvert/main.go b/cmd/cbconvert/main.go index fd75602..8fc6ae9 100644 --- a/cmd/cbconvert/main.go +++ b/cmd/cbconvert/main.go @@ -152,6 +152,7 @@ func parseFlags() (cbconvert.Options, []string) { cover.IntVar(&opts.Width, "width", 0, "Image width") cover.IntVar(&opts.Height, "height", 0, "Image height") cover.BoolVar(&opts.Fit, "fit", false, "Best fit for required width and height") + cover.StringVar(&opts.Format, "format", "jpeg", "Image format, valid values are jpeg, png, tiff, bmp, webp, avif") cover.IntVar(&opts.Quality, "quality", 75, "Image quality") cover.IntVar(&opts.Filter, "filter", 2, "0=NearestNeighbor, 1=Box, 2=Linear, 3=MitchellNetravali, 4=CatmullRom, 6=Gaussian, 7=Lanczos") cover.StringVar(&opts.Outdir, "outdir", ".", "Output directory")