properly support tga and webp images

This commit is contained in:
2025-05-08 22:06:30 -04:00
parent b186ea934d
commit bad6802bd1
5 changed files with 69 additions and 18 deletions

View File

@@ -170,4 +170,31 @@
<key>LSTypeIsPackage</key>
<false/>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>webp</string>
<string>WEBP</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>webp.icns</string>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>image/webp</string>
</array>
<key>CFBundleTypeName</key>
<string>WebP Image</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>WEBP</string>
</array>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSItemContentTypes</key>
<array>
<string>org.webmproject.webp</string>
</array>
<key>LSTypeIsPackage</key>
<false/>
</dict>
</array>

View File

@@ -71,6 +71,15 @@ var Valid = []FileDescription{
OSTypes: []string{"TIFF"},
ItemContentTypes: "public.tiff",
},
{
TkTypeName: "WEBP",
MacExtensions: []string{"webp", "WEBP"},
IconFile: "webp.icns",
MIMETypes: []string{"image/webp"},
TypeName: "WebP Image",
OSTypes: []string{"WEBP"},
ItemContentTypes: "org.webmproject.webp",
},
}
func GetTkTypes(fds []FileDescription) []tk.FileType {
@@ -86,7 +95,3 @@ func GetTkTypes(fds []FileDescription) []tk.FileType {
}
return fts
}
func main() {
fmt.Println("test")
}

3
go.mod
View File

@@ -4,6 +4,7 @@ go 1.24.2
require (
github.com/disintegration/imaging v1.6.2
golang.org/x/image v0.27.0
modernc.org/tk9.0 v0.70.2-0.20250508084556-20db091eb764
)
@@ -11,6 +12,7 @@ require (
git.yetaga.in/alazyreader/appify v0.0.0-20250503185351-c56d5058ecd7 // indirect
github.com/JackMordaunt/icns v1.0.0 // indirect
github.com/adrg/xdg v0.5.3 // indirect
github.com/dblezek/tga v0.0.0-20150626111426-80720cbc1017 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/ebitengine/purego v0.8.2 // indirect
github.com/evilsocket/islazy v1.11.0 // indirect
@@ -22,7 +24,6 @@ require (
github.com/pkg/errors v0.9.1 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect
golang.org/x/image v0.26.0 // indirect
golang.org/x/net v0.39.0 // indirect
golang.org/x/sys v0.32.0 // indirect
modernc.org/fileutil v1.3.1 // indirect

19
go.sum
View File

@@ -6,6 +6,8 @@ github.com/adrg/xdg v0.5.3 h1:xRnxJXne7+oWDatRhR1JLnvuccuIeCoBu2rtuLqQB78=
github.com/adrg/xdg v0.5.3/go.mod h1:nlTsY+NNiCBGCK2tpm09vRqfVzrc2fLmXGpBLF0zlTQ=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dblezek/tga v0.0.0-20150626111426-80720cbc1017 h1:awJfkE1xXsPK+yOi1JfFBYCrSBkZXWbOgEFL6dmYeUA=
github.com/dblezek/tga v0.0.0-20150626111426-80720cbc1017/go.mod h1:47yJHzYP/+2SCHY45B0eyR1QaecoOhkTTpS7UasE0DY=
github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
@@ -39,8 +41,8 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM=
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.26.0 h1:4XjIFEZWQmCZi6Wv8BoxsDhRU3RVnLX04dToTDAEPlY=
golang.org/x/image v0.26.0/go.mod h1:lcxbMFAovzpnJxzXS3nyL83K27tmqtKzIJpctK8YO5c=
golang.org/x/image v0.27.0 h1:C8gA4oWU/tKkdCfYT6T2u4faJu3MeNS5O8UPWlPF61w=
golang.org/x/image v0.27.0/go.mod h1:xbdrClrAUway1MUTEZDq9mz/UpRwYAkFFNUslZtcB+g=
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
@@ -55,11 +57,10 @@ golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU=
golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
modernc.org/cc/v4 v4.26.0 h1:QMYvbVduUGH0rrO+5mqF/PSPPRZNpRtg2CLELy7vUpA=
modernc.org/cc/v4 v4.26.0/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0=
modernc.org/ccgo/v4 v4.27.0 h1:ApXKt4g9vCnEjrKs565hS2oHeEji2HduwIH9FysJa5k=
modernc.org/ccgo/v4 v4.27.0/go.mod h1:Sem8f7TFUtVXkG2fiaChQtyyfkqhJBg/zjEJBkmuAVY=
modernc.org/cc/v4 v4.26.1 h1:+X5NtzVBn0KgsBCBe+xkDC7twLb/jNVj9FPgiwSQO3s=
modernc.org/cc/v4 v4.26.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0=
modernc.org/ccgo/v4 v4.27.1 h1:emhLB4uoOmkZUnTDFcMI3AbkmU/Evjuerit9Taqe6Ss=
modernc.org/ccgo/v4 v4.27.1/go.mod h1:543Q0qQhJWekKVS5P6yL5fO6liNhla9Lbm2/B3rEKDE=
modernc.org/fileutil v1.3.1 h1:8vq5fe7jdtEvoCf3Zf9Nm0Q05sH6kGx0Op2CPx1wTC8=
modernc.org/fileutil v1.3.1/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc=
modernc.org/fsm v1.3.2 h1:f58HBydnAmLhugDKOlNniDYfKRcOH/3T4xQTO1AZXag=
@@ -82,8 +83,6 @@ modernc.org/libXrender v0.9.13 h1:aTH9Ii0TepPm1MmC9aDr06UXNw5XvrIHC45y+3ULeRY=
modernc.org/libXrender v0.9.13/go.mod h1:6K3VytTIn9aA8WOZQY0ZjB172pVI0VR66WLOsVW7sLo=
modernc.org/libbsd v0.11.10 h1:BYRxR4L7paz3UPreS1PuKB08vULCIGcHX3GA4bBpwzQ=
modernc.org/libbsd v0.11.10/go.mod h1:NdciOdGkUDnB93ld9/nxlNG8yKhTGr6BzNGzlPErqtI=
modernc.org/libc v1.65.0 h1:e183gLDnAp9VJh6gWKdTy0CThL9Pt7MfcR/0bgb7Y1Y=
modernc.org/libc v1.65.0/go.mod h1:7m9VzGq7APssBTydds2zBcxGREwvIGpuUBaKTXdm2Qs=
modernc.org/libc v1.65.2 h1:drWL1QO9fKXr3kXDN8y+4lKyBr8bA3mtUBQpftq3IJw=
modernc.org/libc v1.65.2/go.mod h1:VI3V2S5mNka4deJErQ0jsMXe7jgxojE2fOB/mWoHlbc=
modernc.org/libexpat v0.10.12 h1:SNjo4U5z7Uu01qId6RTDH5uYT1+T94Z1JJ0s8g1FB2o=
@@ -118,12 +117,8 @@ modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
modernc.org/tcl9.0 v0.16.4 h1:noYrLlwhcs4sDwEHl5V+v4YAaqdvJazAjUrq9ed6MaI=
modernc.org/tcl9.0 v0.16.4/go.mod h1:83wNhr9By1XoSyVXE4PFnq1/TnA/DY9NXoLf38qEAZo=
modernc.org/tcl9.0 v0.16.5 h1:B+nAfTErzFweaVm3W+7QuIdMdMrX1FZkfYTL3mFvF8A=
modernc.org/tcl9.0 v0.16.5/go.mod h1:+Kl8LKAwB6KwmoSS43e+8CZhwjn6VyYGB/yS88eVPCA=
modernc.org/tk9.0 v0.70.1 h1:pRJpdi+UB5uQwY2DOqYxU3mhzwFm4OdC54/PazBcxJc=
modernc.org/tk9.0 v0.70.1/go.mod h1:EixZjVSmuUJws/RS/cT0rZgbZefWIB4rjMue+9GxQjI=
modernc.org/tk9.0 v0.70.2-0.20250508084556-20db091eb764 h1:9h26CcGJ4o/+tW6SbHFf97s/grurL7/7qChJ96saNVU=
modernc.org/tk9.0 v0.70.2-0.20250508084556-20db091eb764/go.mod h1:bE5B+tzi3tSLcfADQhoIVIG0yIsw6Pz74XuXtkWlBY4=
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=

25
main.go
View File

@@ -3,6 +3,7 @@ package main
import (
_ "embed"
"fmt"
"image"
"log"
"os"
"path/filepath"
@@ -11,7 +12,9 @@ import (
"strings"
"git.yetaga.in/alazyreader/why/filetypes"
"github.com/dblezek/tga"
"github.com/disintegration/imaging"
"golang.org/x/image/webp"
tk "modernc.org/tk9.0"
)
@@ -39,6 +42,10 @@ func must[T any](t T, err error) T {
return t
}
func checkErr[T any](_ T, err error) bool {
return err == nil
}
func isImage(entry os.DirEntry) bool {
if entry.IsDir() {
return false
@@ -108,11 +115,27 @@ func newDirectory(img *tk.LabelWidget) func() {
}
func updateImage(file string, img *tk.LabelWidget) {
i, err := imaging.Open(file, imaging.AutoOrientation(true))
var i image.Image
f, err := os.Open(file)
if err != nil {
log.Printf("error opening image: %v", err)
return
}
defer f.Close()
ext := strings.ToLower(strings.TrimPrefix(filepath.Ext(file), "."))
if checkErr(imaging.FormatFromExtension(ext)) {
i, err = imaging.Decode(f, imaging.AutoOrientation(true))
} else if ext == "webp" {
i, err = webp.Decode(f)
} else if ext == "tga" {
i, err = tga.Decode(f)
}
if err != nil {
log.Printf("error decoding image: %v", err)
return
}
i = imaging.Fit(i,
// -50 to give some space to breathe around the edges
must(strconv.Atoi(tk.WinfoScreenWidth(tk.App)))-50,