4
0
Эх сурвалжийг харах

feat(icon): add resizing support for webp images

Julien Voisin 7 сар өмнө
parent
commit
261b72f149

+ 5 - 2
internal/reader/icon/finder.go

@@ -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))

+ 15 - 0
internal/reader/icon/finder_test.go

@@ -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"),