From 1da175b8796b32eb9dfca95d60a00f60391e0642 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Wed, 29 Oct 2025 22:51:18 -0400 Subject: [PATCH] Re-org so I can do more. --- data.go | 39 +++++++++++++++++++++++++ main.go | 80 +-------------------------------------------------- processing.go | 50 ++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 79 deletions(-) create mode 100644 data.go create mode 100644 processing.go diff --git a/data.go b/data.go new file mode 100644 index 0000000..3e18b5b --- /dev/null +++ b/data.go @@ -0,0 +1,39 @@ +package main + +import ( + "os" + "encoding/json" + "log" +) + + +type Conversion struct { + PixelWidth int + ColorDepth int + DitherType int + Width int + Height int +} + +type Settings struct { + Source string + Target string + Base Conversion + Exceptions map[string]Conversion +} + +func LoadSettings(path string) Settings { + var settings Settings + + config, err := os.ReadFile(path) + if err != nil { + log.Fatalf("invalid config path: %s", path) + } + + err = json.Unmarshal(config, &settings) + if err != nil { + log.Fatalf("json format error:", err) + } + + return settings +} diff --git a/main.go b/main.go index b7c71a0..6b1d3da 100644 --- a/main.go +++ b/main.go @@ -1,76 +1,14 @@ package main import ( - "os" - "image" - "encoding/json" - "log" - "image/png" - "github.com/disintegration/gift" "flag" - "lcthw.dev/go/jankifier/filters" ) -func LoadImage(filename string) image.Image { - reader, err := os.Open(filename) - if err != nil { log.Fatal(err) } - defer reader.Close() - - img, _, err := image.Decode(reader) - if err != nil { log.Fatal(err) } - - return img -} - -func SaveImage(filename string, img image.Image) { - out, err := os.Create(filename) - if err != nil { - log.Fatalf("can't write file %s: %v", filename, err) - } - defer out.Close() - - err = png.Encode(out, img) - if err != nil { - log.Fatalf("can't png encode %s: %v", filename, err) - } -} - type Opts struct { - Config string +Config string Force bool } -type Conversion struct { - PixelWidth int - ColorDepth int - DitherType int - Width int - Height int -} - -type Settings struct { - Source string - Target string - Base Conversion - Exceptions map[string]Conversion -} - -func LoadSettings(path string) Settings { - var settings Settings - - config, err := os.ReadFile(path) - if err != nil { - log.Fatalf("invalid config path: %s", path) - } - - err = json.Unmarshal(config, &settings) - if err != nil { - log.Fatalf("json format error:", err) - } - - return settings -} - func ParseOpts() Opts { var opts Opts @@ -81,22 +19,6 @@ func ParseOpts() Opts { return opts } -func JankImage(settings Conversion, in_file string, out_file string) { - src := LoadImage(in_file) - bounds := src.Bounds() - - resize := gift.Resize(bounds.Max.X / settings.PixelWidth, 0, gift.NearestNeighborResampling) - posterize := filters.Posterize(uint16(settings.ColorDepth), settings.DitherType) - upscale := filters.Upscale(bounds, settings.PixelWidth) - sharpen := gift.UnsharpMask(1, 1, 0) - - g := gift.New(resize, posterize, upscale, sharpen) - out_img := image.NewNRGBA(g.Bounds(bounds)) - g.Draw(out_img, src) - - SaveImage(out_file, out_img) -} - func main() { opts := ParseOpts() settings := LoadSettings(opts.Config) diff --git a/processing.go b/processing.go new file mode 100644 index 0000000..56f6c87 --- /dev/null +++ b/processing.go @@ -0,0 +1,50 @@ +package main + +import ( + "os" + "image" + "log" + "image/png" + "github.com/disintegration/gift" + "lcthw.dev/go/jankifier/filters" +) + +func LoadImage(filename string) image.Image { + reader, err := os.Open(filename) + if err != nil { log.Fatal(err) } + defer reader.Close() + + img, _, err := image.Decode(reader) + if err != nil { log.Fatal(err) } + + return img +} + +func SaveImage(filename string, img image.Image) { + out, err := os.Create(filename) + if err != nil { + log.Fatalf("can't write file %s: %v", filename, err) + } + defer out.Close() + + err = png.Encode(out, img) + if err != nil { + log.Fatalf("can't png encode %s: %v", filename, err) + } +} + +func JankImage(settings Conversion, in_file string, out_file string) { + src := LoadImage(in_file) + bounds := src.Bounds() + + resize := gift.Resize(bounds.Max.X / settings.PixelWidth, 0, gift.NearestNeighborResampling) + posterize := filters.Posterize(uint16(settings.ColorDepth), settings.DitherType) + upscale := filters.Upscale(bounds, settings.PixelWidth) + sharpen := gift.UnsharpMask(1, 1, 0) + + g := gift.New(resize, posterize, upscale, sharpen) + out_img := image.NewNRGBA(g.Bounds(bounds)) + g.Draw(out_img, src) + + SaveImage(out_file, out_img) +}