From a3c9667d63f2079dd0a31ad1af4fc4a76f120627 Mon Sep 17 00:00:00 2001 From: celogeek <65178+celogeek@users.noreply.github.com> Date: Tue, 4 Jul 2023 09:44:02 +0200 Subject: [PATCH] add libjpeg-turbo --- go.mod | 1 + go.sum | 2 ++ .../epub_image_processor_decoder.go | 17 ++++++++++ .../epub_image_processor_decoder_turbo.go | 31 +++++++++++++++++++ .../epub_image_processor_loader.go | 10 ++---- 5 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 internal/epub/imageprocessor/epub_image_processor_decoder.go create mode 100644 internal/epub/imageprocessor/epub_image_processor_decoder_turbo.go diff --git a/go.mod b/go.mod index c6b4b29..54ecab8 100644 --- a/go.mod +++ b/go.mod @@ -23,6 +23,7 @@ require ( github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/stretchr/testify v1.8.4 // indirect + github.com/viam-labs/go-libjpeg v0.3.1 // indirect golang.org/x/net v0.10.0 // indirect golang.org/x/sys v0.8.0 // indirect golang.org/x/term v0.8.0 // indirect diff --git a/go.sum b/go.sum index a38f8e7..c5bd0af 100644 --- a/go.sum +++ b/go.sum @@ -40,6 +40,8 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tcnksm/go-latest v0.0.0-20170313132115-e3007ae9052e h1:IWllFTiDjjLIf2oeKxpIUmtiDV5sn71VgeQgg6vcE7k= github.com/tcnksm/go-latest v0.0.0-20170313132115-e3007ae9052e/go.mod h1:d7u6HkTYKSv5m6MCKkOQlHwaShTMl3HjqSGW3XtVhXM= +github.com/viam-labs/go-libjpeg v0.3.1 h1:J/byavXHFqRI1PFPrnPbP+wFCr1y+Cn1CwKXrORCPD0= +github.com/viam-labs/go-libjpeg v0.3.1/go.mod h1:b0ISpf9lJv9MO1h1gXAmSA/osG19cKGYjfYc6aeEjqs= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= diff --git a/internal/epub/imageprocessor/epub_image_processor_decoder.go b/internal/epub/imageprocessor/epub_image_processor_decoder.go new file mode 100644 index 0000000..4421add --- /dev/null +++ b/internal/epub/imageprocessor/epub_image_processor_decoder.go @@ -0,0 +1,17 @@ +//go:build !turbo + +package epubimageprocessor + +import ( + "image" + _ "image/jpeg" + _ "image/png" + "io" + + _ "golang.org/x/image/webp" +) + +func DecodeImage(name string, f io.ReadCloser) (img image.Image, err error) { + img, _, err = image.Decode(f) + return +} diff --git a/internal/epub/imageprocessor/epub_image_processor_decoder_turbo.go b/internal/epub/imageprocessor/epub_image_processor_decoder_turbo.go new file mode 100644 index 0000000..8fdea77 --- /dev/null +++ b/internal/epub/imageprocessor/epub_image_processor_decoder_turbo.go @@ -0,0 +1,31 @@ +//go:build turbo + +package epubimageprocessor + +import ( + "fmt" + "image" + _ "image/jpeg" + _ "image/png" + "io" + "path/filepath" + "strings" + + _ "golang.org/x/image/webp" + + turbojpeg "github.com/viam-labs/go-libjpeg/jpeg" +) + +func DecodeImage(name string, f io.ReadCloser) (img image.Image, err error) { + switch strings.ToLower(filepath.Ext(name)) { + case ".jpeg", ".jpg": + img, err = turbojpeg.Decode(f, &turbojpeg.DecoderOptions{}) + if err != nil { + fmt.Println(err) + img, _, err = image.Decode(f) + } + default: + img, _, err = image.Decode(f) + } + return +} diff --git a/internal/epub/imageprocessor/epub_image_processor_loader.go b/internal/epub/imageprocessor/epub_image_processor_loader.go index 51f7e08..1cc7114 100644 --- a/internal/epub/imageprocessor/epub_image_processor_loader.go +++ b/internal/epub/imageprocessor/epub_image_processor_loader.go @@ -6,8 +6,6 @@ import ( "errors" "fmt" "image" - _ "image/jpeg" - _ "image/png" "io" "io/fs" "os" @@ -16,8 +14,6 @@ import ( "strings" "sync" - _ "golang.org/x/image/webp" - "github.com/celogeek/go-comic-converter/v2/internal/sortpath" "github.com/nwaples/rardecode/v2" pdfimage "github.com/raff/pdfreader/image" @@ -125,7 +121,7 @@ func (e *EPUBImageProcessor) loadDir() (totalImages int, output chan *tasks, err fmt.Fprintf(os.Stderr, "\nerror processing image %s: %s\n", job.Path, err) os.Exit(1) } - img, _, err = image.Decode(f) + img, err = DecodeImage(job.Path, f) if err != nil { fmt.Fprintf(os.Stderr, "\nerror processing image %s: %s\n", job.Path, err) os.Exit(1) @@ -217,7 +213,7 @@ func (e *EPUBImageProcessor) loadCbz() (totalImages int, output chan *tasks, err fmt.Fprintf(os.Stderr, "\nerror processing image %s: %s\n", job.F.Name, err) os.Exit(1) } - img, _, err = image.Decode(f) + img, err = DecodeImage(job.F.Name, f) if err != nil { fmt.Fprintf(os.Stderr, "\nerror processing image %s: %s\n", job.F.Name, err) os.Exit(1) @@ -336,7 +332,7 @@ func (e *EPUBImageProcessor) loadCbr() (totalImages int, output chan *tasks, err fmt.Fprintf(os.Stderr, "\nerror processing image %s: %s\n", job.Name, err) os.Exit(1) } - img, _, err = image.Decode(f) + img, err = DecodeImage(job.Name, f) if err != nil { fmt.Fprintf(os.Stderr, "\nerror processing image %s: %s\n", job.Name, err) os.Exit(1)