Improve performance of placeholder images (#1325)

* Don't include updatedAt field when fetching album art placeholder. This will allow browers to cache the place holder

* Apply resizing to placeholder image

* Fix issues discovered by CI linter and prettier

* Updates from PR review
This commit is contained in:
Tucker Kern
2021-09-06 20:34:37 -06:00
committed by GitHub
parent 173b30cd59
commit fb11080545
2 changed files with 19 additions and 4 deletions
+13 -2
View File
@@ -8,6 +8,7 @@ import (
"image" "image"
_ "image/gif" _ "image/gif"
"image/jpeg" "image/jpeg"
"image/png"
_ "image/png" _ "image/png"
"io" "io"
"os" "os"
@@ -127,6 +128,12 @@ func (a *artwork) getArtwork(ctx context.Context, id string, path string, size i
if err != nil { if err != nil {
log.Warn(ctx, "Error extracting image", "path", path, "size", size, err) log.Warn(ctx, "Error extracting image", "path", path, "size", size, err)
reader, err = resources.FS.Open(consts.PlaceholderAlbumArt) reader, err = resources.FS.Open(consts.PlaceholderAlbumArt)
if size != 0 && err == nil {
var r io.ReadCloser
r, err = resources.FS.Open(consts.PlaceholderAlbumArt)
reader, err = resizeImage(r, size, true)
}
} }
}() }()
@@ -149,13 +156,13 @@ func (a *artwork) getArtwork(ctx context.Context, id string, path string, size i
return return
} }
defer r.Close() defer r.Close()
reader, err = resizeImage(r, size) reader, err = resizeImage(r, size, false)
} }
return return
} }
func resizeImage(reader io.Reader, size int) (io.ReadCloser, error) { func resizeImage(reader io.Reader, size int, usePng bool) (io.ReadCloser, error) {
img, _, err := image.Decode(reader) img, _, err := image.Decode(reader)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -171,7 +178,11 @@ func resizeImage(reader io.Reader, size int) (io.ReadCloser, error) {
} }
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
if usePng {
err = png.Encode(buf, m)
} else {
err = jpeg.Encode(buf, m, &jpeg.Options{Quality: conf.Server.CoverJpegQuality}) err = jpeg.Encode(buf, m, &jpeg.Options{Quality: conf.Server.CoverJpegQuality})
}
return io.NopCloser(buf), err return io.NopCloser(buf), err
} }
+5 -1
View File
@@ -49,7 +49,11 @@ const getCoverArtUrl = (record, size) => {
...(record.updatedAt && { _: record.updatedAt }), ...(record.updatedAt && { _: record.updatedAt }),
...(size && { size }), ...(size && { size }),
} }
return baseUrl(url('getCoverArt', record.coverArtId || 'not_found', options)) if (record.coverArtId) {
return baseUrl(url('getCoverArt', record.coverArtId, options))
} else {
return baseUrl(url('getCoverArt', 'not_found', size && { size }))
}
} }
const streamUrl = (id) => { const streamUrl = (id) => {