support more images natively
This commit is contained in:
78
main.go
78
main.go
@@ -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
|
||||
|
Reference in New Issue
Block a user