support more images natively

This commit is contained in:
2025-02-24 16:56:40 -05:00
parent 312a49d838
commit 8b060fb2ec
3 changed files with 41 additions and 105 deletions

78
main.go
View File

@@ -1,19 +1,12 @@
package main
import (
"bytes"
_ "embed"
"fmt"
"image"
"image/draw"
"image/jpeg"
"image/png"
"io"
"log"
"os"
"path/filepath"
"slices"
"time"
tk "modernc.org/tk9.0"
)
@@ -24,22 +17,13 @@ import (
var noise []byte
var validFileTypes = []tk.FileType{
{
TypeName: "JPEG",
Extensions: []string{".jpg", ".jpeg"},
},
{
TypeName: "GIF",
Extensions: []string{".gif"},
},
{
TypeName: "PNG",
Extensions: []string{".png"},
},
{
TypeName: "SVG",
Extensions: []string{".svg"},
},
{TypeName: "BMP", Extensions: []string{".bmp"}},
{TypeName: "JPEG", Extensions: []string{".jpg", ".jpeg"}},
{TypeName: "GIF", Extensions: []string{".gif"}},
{TypeName: "PNG", Extensions: []string{".png"}},
{TypeName: "SVG", Extensions: []string{".svg"}},
{TypeName: "TGA", Extensions: []string{".tga"}},
{TypeName: "TIFF", Extensions: []string{".tiff"}},
}
var metaActive bool
@@ -63,42 +47,6 @@ func isImage(entry os.DirEntry) bool {
return false
}
func isType(filename string, desired string) bool {
ext := filepath.Ext(filename)
if ext == "" {
return false
}
for _, ft := range validFileTypes {
if slices.Contains(ft.Extensions, ext) && ft.TypeName == desired {
return true
}
}
return false
}
func jpegToPng(in io.Reader) (*bytes.Buffer, error) {
start := time.Now()
buf := new(bytes.Buffer)
img, err := jpeg.Decode(in)
if err != nil {
return nil, fmt.Errorf("unable to decode jpeg: %w", err)
}
b := img.Bounds()
dst := image.NewNRGBA(image.Rect(0, 0, b.Dx(), b.Dy()))
draw.Draw(dst, dst.Bounds(), img, b.Min, draw.Src)
if err := (&png.Encoder{
CompressionLevel: -2,
}).Encode(buf, dst); err != nil {
return nil, fmt.Errorf("unable to encode png: %w", err)
}
end := time.Now()
log.Printf("jpeg to png took %v", end.Sub(start))
return buf, nil
}
func newFileInDirectory(img *tk.LabelWidget) func() {
return func() {
files := tk.GetOpenFile(tk.Filetypes(validFileTypes))
@@ -152,17 +100,7 @@ func updateImage(file string, img *tk.LabelWidget) {
log.Println(err.Error())
return
}
var r io.Reader
if isType(file, "JPEG") {
r, err = jpegToPng(f)
if err != nil {
log.Println(err.Error())
return
}
} else {
r = f
}
i, err := io.ReadAll(r)
i, err := io.ReadAll(f)
if err != nil {
log.Println(err.Error())
return