42 lines
859 B
Go
42 lines
859 B
Go
package metadata
|
|
|
|
import (
|
|
"bytes"
|
|
"image/png"
|
|
"strconv"
|
|
|
|
"github.com/nfnt/resize"
|
|
|
|
"fyne.io/fyne/v2"
|
|
)
|
|
|
|
func ScaleIcon(data fyne.Resource, size int) fyne.Resource {
|
|
img, err := png.Decode(bytes.NewReader(data.Content()))
|
|
if err != nil {
|
|
fyne.LogError("Failed to decode app icon", err)
|
|
return data
|
|
}
|
|
|
|
if img.Bounds().Dx() <= size {
|
|
return data
|
|
}
|
|
|
|
sized := resize.Resize(uint(size), uint(size), img, resize.Lanczos3)
|
|
smallData := &bytes.Buffer{}
|
|
err = png.Encode(smallData, sized)
|
|
if err != nil {
|
|
fyne.LogError("Failed to encode smaller app icon", err)
|
|
return data
|
|
}
|
|
|
|
name := data.Name()
|
|
nameLen := len(name)
|
|
suffix := "-" + strconv.Itoa(size) + ".png"
|
|
if nameLen <= 4 || name[nameLen-4] != '.' {
|
|
name = "appicon" + suffix
|
|
} else {
|
|
name = name[:nameLen-4] + suffix
|
|
}
|
|
return fyne.NewStaticResource(name, smallData.Bytes())
|
|
}
|