Improve resizeImage code readability

This commit is contained in:
Deluan
2024-05-16 13:39:10 -04:00
parent 52235c291d
commit 8ed07333ed
+11 -22
View File
@@ -86,17 +86,12 @@ func (a *resizedArtworkReader) Reader(ctx context.Context) (io.ReadCloser, strin
func asImageReader(r io.Reader) (io.Reader, string, error) { func asImageReader(r io.Reader) (io.Reader, string, error) {
br := bufio.NewReader(r) br := bufio.NewReader(r)
buf, err := br.Peek(512) buf, err := br.Peek(512)
if err == io.EOF && len(buf) > 0 { if err != nil && err != io.EOF {
// Check if there are enough bytes to detect type
typ := http.DetectContentType(buf)
if typ != "" {
return br, typ, nil
}
}
if err != nil {
return nil, "", err return nil, "", err
} }
return br, http.DetectContentType(buf), nil
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) {
@@ -105,32 +100,26 @@ func resizeImage(reader io.Reader, size int) (io.Reader, int, error) {
return nil, 0, err return nil, 0, err
} }
img, _, err := image.Decode(r) original, _, err := image.Decode(r)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, err
} }
// Don't upscale the image bounds := original.Bounds()
bounds := img.Bounds()
originalSize := max(bounds.Max.X, bounds.Max.Y) originalSize := max(bounds.Max.X, bounds.Max.Y)
// Don't upscale the image
if originalSize <= size { if originalSize <= size {
return nil, originalSize, nil return nil, originalSize, nil
} }
var m *image.NRGBA resized := imaging.Fit(original, size, size, imaging.Lanczos)
// Preserve the aspect ratio of the image.
if bounds.Max.X > bounds.Max.Y {
m = imaging.Resize(img, size, 0, imaging.Lanczos)
} else {
m = imaging.Resize(img, 0, size, imaging.Lanczos)
}
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
buf.Reset()
if format == "image/png" { if format == "image/png" {
err = png.Encode(buf, m) err = png.Encode(buf, resized)
} else { } else {
err = jpeg.Encode(buf, m, &jpeg.Options{Quality: conf.Server.CoverJpegQuality}) err = jpeg.Encode(buf, resized, &jpeg.Options{Quality: conf.Server.CoverJpegQuality})
} }
return buf, originalSize, err return buf, originalSize, err
} }