Simplify image format detection code

This commit is contained in:
Deluan 2024-05-16 13:48:26 -04:00
parent 8ed07333ed
commit 7f52ff72dc
2 changed files with 6 additions and 30 deletions

View File

@ -216,12 +216,9 @@ var _ = Describe("Artwork", func() {
r, _, err := aw.Get(context.Background(), alMultipleCovers.CoverArtID(), 15) r, _, err := aw.Get(context.Background(), alMultipleCovers.CoverArtID(), 15)
Expect(err).ToNot(HaveOccurred()) Expect(err).ToNot(HaveOccurred())
br, format, err := asImageReader(r) img, format, err := image.Decode(r)
Expect(format).To(Equal("image/png"))
Expect(err).ToNot(HaveOccurred())
img, _, err := image.Decode(br)
Expect(err).ToNot(HaveOccurred()) Expect(err).ToNot(HaveOccurred())
Expect(format).To(Equal("png"))
Expect(img.Bounds().Size().X).To(Equal(15)) Expect(img.Bounds().Size().X).To(Equal(15))
Expect(img.Bounds().Size().Y).To(Equal(15)) Expect(img.Bounds().Size().Y).To(Equal(15))
}) })
@ -230,11 +227,8 @@ var _ = Describe("Artwork", func() {
r, _, err := aw.Get(context.Background(), alMultipleCovers.CoverArtID(), 200) r, _, err := aw.Get(context.Background(), alMultipleCovers.CoverArtID(), 200)
Expect(err).ToNot(HaveOccurred()) Expect(err).ToNot(HaveOccurred())
br, format, err := asImageReader(r) img, format, err := image.Decode(r)
Expect(format).To(Equal("image/jpeg")) Expect(format).To(Equal("jpeg"))
Expect(err).ToNot(HaveOccurred())
img, _, err := image.Decode(br)
Expect(err).ToNot(HaveOccurred()) Expect(err).ToNot(HaveOccurred())
Expect(img.Bounds().Size().X).To(Equal(200)) Expect(img.Bounds().Size().X).To(Equal(200))
Expect(img.Bounds().Size().Y).To(Equal(200)) Expect(img.Bounds().Size().Y).To(Equal(200))

View File

@ -1,7 +1,6 @@
package artwork package artwork
import ( import (
"bufio"
"bytes" "bytes"
"context" "context"
"fmt" "fmt"
@ -9,7 +8,6 @@ import (
"image/jpeg" "image/jpeg"
"image/png" "image/png"
"io" "io"
"net/http"
"time" "time"
"github.com/disintegration/imaging" "github.com/disintegration/imaging"
@ -83,24 +81,8 @@ func (a *resizedArtworkReader) Reader(ctx context.Context) (io.ReadCloser, strin
return io.NopCloser(resized), fmt.Sprintf("%s@%d", a.artID, a.size), nil return io.NopCloser(resized), fmt.Sprintf("%s@%d", a.artID, a.size), nil
} }
func asImageReader(r io.Reader) (io.Reader, string, error) {
br := bufio.NewReader(r)
buf, err := br.Peek(512)
if err != nil && err != io.EOF {
return nil, "", err
}
typ := http.DetectContentType(buf)
return br, typ, nil
}
func resizeImage(reader io.Reader, size int) (io.Reader, int, error) { func resizeImage(reader io.Reader, size int) (io.Reader, int, error) {
r, format, err := asImageReader(reader) original, format, err := image.Decode(reader)
if err != nil {
return nil, 0, err
}
original, _, err := image.Decode(r)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, err
} }
@ -116,7 +98,7 @@ func resizeImage(reader io.Reader, size int) (io.Reader, int, error) {
resized := imaging.Fit(original, size, size, imaging.Lanczos) resized := imaging.Fit(original, size, size, imaging.Lanczos)
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
if format == "image/png" { if format == "png" {
err = png.Encode(buf, resized) err = png.Encode(buf, resized)
} else { } else {
err = jpeg.Encode(buf, resized, &jpeg.Options{Quality: conf.Server.CoverJpegQuality}) err = jpeg.Encode(buf, resized, &jpeg.Options{Quality: conf.Server.CoverJpegQuality})