1
0
Fork 0
mirror of https://github.com/miniflux/v2.git synced 2025-08-16 18:01:37 +00:00

feat(icon): add resizing support for webp images

This commit is contained in:
Julien Voisin 2025-08-15 04:36:11 +02:00 committed by GitHub
parent 6c60d61f36
commit 261b72f149
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 20 additions and 2 deletions

View file

@ -27,6 +27,7 @@ import (
"github.com/PuerkitoBio/goquery"
"golang.org/x/image/draw"
"golang.org/x/image/webp"
)
type iconFinder struct {
@ -195,8 +196,8 @@ func (f *iconFinder) downloadIcon(iconURL string) (*model.Icon, error) {
func resizeIcon(icon *model.Icon) *model.Icon {
r := bytes.NewReader(icon.Content)
if !slices.Contains([]string{"image/jpeg", "image/png", "image/gif"}, icon.MimeType) {
slog.Info("icon isn't a png/gif/jpeg, can't resize", slog.String("mimetype", icon.MimeType))
if !slices.Contains([]string{"image/jpeg", "image/png", "image/gif", "image/webp"}, icon.MimeType) {
slog.Info("icon isn't a png/gif/jpeg/webp, can't resize", slog.String("mimetype", icon.MimeType))
return icon
}
@ -221,6 +222,8 @@ func resizeIcon(icon *model.Icon) *model.Icon {
src, err = png.Decode(r)
case "image/gif":
src, err = gif.Decode(r)
case "image/webp":
src, err = webp.Decode(r)
}
if err != nil || src == nil {
slog.Warn("unable to decode the icon", slog.Any("error", err))

View file

@ -170,6 +170,21 @@ func TestResizeIconPng(t *testing.T) {
}
}
func TestResizeIconWebp(t *testing.T) {
data, err := base64.StdEncoding.DecodeString("UklGRkAAAABXRUJQVlA4IDQAAADwAQCdASoBAAEAAQAcJaACdLoB+AAETAAA/vW4f/6aR40jxpHxcP/ugT90CfugT/3NoAAA")
if err != nil {
t.Fatal(err)
}
icon := model.Icon{
Content: data,
MimeType: "image/webp",
}
if !bytes.Equal(icon.Content, resizeIcon(&icon).Content) {
t.Fatalf("Converted webp smaller than 16x16")
}
}
func TestResizeInvalidImage(t *testing.T) {
icon := model.Icon{
Content: []byte("invalid data"),