From 090b11fc9cfe15b89b08ef6d6246824b3d871aea Mon Sep 17 00:00:00 2001 From: Nova Kwok Date: Tue, 21 Mar 2023 13:33:58 +0800 Subject: [PATCH] Refine codes (#184) * Refine code * Remove log --- encoder.go | 39 ++++++++++++++++++++++++++++++--------- encoder_test.go | 6 +++--- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/encoder.go b/encoder.go index 27aed3b..19e4a42 100644 --- a/encoder.go +++ b/encoder.go @@ -12,6 +12,7 @@ import ( "path/filepath" "runtime" "strings" + "sync" "github.com/Kagami/go-avif" "github.com/chai2010/webp" @@ -22,20 +23,39 @@ import ( func convertFilter(raw, avifPath, webpPath string, c chan int) { // all absolute paths + var wg sync.WaitGroup + wg.Add(2) if !imageExists(avifPath) && config.EnableAVIF { - convertImage(raw, avifPath, "avif") + go func() { + err := convertImage(raw, avifPath, "avif") + if err != nil { + log.Errorln(err) + } + defer wg.Done() + }() + } else { + wg.Done() } if !imageExists(webpPath) { - convertImage(raw, webpPath, "webp") + go func() { + err := convertImage(raw, webpPath, "webp") + if err != nil { + log.Errorln(err) + } + defer wg.Done() + }() + } else { + wg.Done() } + wg.Wait() if c != nil { c <- 1 } } -func convertImage(raw, optimized, itype string) { +func convertImage(raw, optimized, itype string) error { // we don't have abc.jpg.png1582558990.webp // delete the old pic and convert a new one. // optimized: /home/webp_server/exhaust/path/to/tsuki.jpg.1582558990.webp @@ -62,11 +82,11 @@ func convertImage(raw, optimized, itype string) { switch itype { case "webp": - _ = webpEncoder(raw, optimized, config.Quality) + err = webpEncoder(raw, optimized, config.Quality) case "avif": - avifEncoder(raw, optimized, config.Quality) + err = avifEncoder(raw, optimized, config.Quality) } - + return err } func readRawImage(imgPath string, maxPixel int) (img image.Image, err error) { @@ -91,7 +111,7 @@ func readRawImage(imgPath string, maxPixel int) (img image.Image, err error) { x, y := img.Bounds().Max.X, img.Bounds().Max.Y if x > maxPixel || y > maxPixel { - errinfo := fmt.Sprintf("WebP: %s(%dx%d) is too large", imgPath, x, y) + errinfo := fmt.Sprintf("Read image error: %s(%dx%d) is too large", imgPath, x, y) log.Warnf(errinfo) return nil, errors.New(errinfo) } @@ -99,7 +119,7 @@ func readRawImage(imgPath string, maxPixel int) (img image.Image, err error) { return img, nil } -func avifEncoder(p1, p2 string, quality float32) { +func avifEncoder(p1, p2 string, quality float32) error { var img image.Image dst, err := os.Create(p2) if err != nil { @@ -108,7 +128,7 @@ func avifEncoder(p1, p2 string, quality float32) { // AVIF has a maximum resolution of 65536 x 65536 pixels. img, err = readRawImage(p1, avifMax) if err != nil { - return + return err } err = avif.Encode(dst, img, &avif.Options{ @@ -123,6 +143,7 @@ func avifEncoder(p1, p2 string, quality float32) { } convertLog("AVIF", p1, p2, quality) + return nil } func webpEncoder(p1, p2 string, quality float32) error { diff --git a/encoder_test.go b/encoder_test.go index 8143215..93e4981 100644 --- a/encoder_test.go +++ b/encoder_test.go @@ -40,13 +40,13 @@ func TestAvifEncoder(t *testing.T) { func TestNonExistImage(t *testing.T) { var dest = "/tmp/test-result" - _ = webpEncoder("./pics/empty.jpg", dest, 80) + webpEncoder("./pics/empty.jpg", dest, 80) avifEncoder("./pics/empty.jpg", dest, 80) } func TestConvertFail(t *testing.T) { var dest = "/tmp/test-result" - _ = webpEncoder("./pics/webp_server.jpg", dest, -1) + webpEncoder("./pics/webp_server.jpg", dest, -1) avifEncoder("./pics/webp_server.jpg", dest, -1) } @@ -54,7 +54,7 @@ func runEncoder(t *testing.T, file string, dest string) { if file == "pics/empty.jpg" { t.Log("Empty file, that's okay.") } - _ = webpEncoder(file, dest, 80) + webpEncoder(file, dest, 80) assertType(t, dest, "image/webp") }