2024-10-26 23:47:48 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"image"
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
|
2024-10-27 17:15:14 +00:00
|
|
|
"github.com/disintegration/gift"
|
|
|
|
|
2024-10-26 23:47:48 +00:00
|
|
|
_ "image/jpeg"
|
|
|
|
"image/png"
|
|
|
|
)
|
|
|
|
|
2024-10-27 16:21:28 +00:00
|
|
|
type ImageFilters struct {
|
2024-10-26 23:47:48 +00:00
|
|
|
Colorize [3]float32
|
|
|
|
Contrast int
|
|
|
|
Gamma float64
|
|
|
|
}
|
|
|
|
|
|
|
|
func loadImage(filename string) image.Image {
|
|
|
|
f, err := os.Open(filename)
|
2024-10-27 16:21:28 +00:00
|
|
|
log.Println("filename: ", filename)
|
2024-10-26 23:47:48 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("os.Open failed: %v", err)
|
|
|
|
}
|
|
|
|
defer f.Close()
|
|
|
|
img, _, err := image.Decode(f)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("image.Decode failed: %v", err)
|
|
|
|
}
|
|
|
|
return img
|
|
|
|
}
|
|
|
|
|
|
|
|
func saveImage(filename string, img image.Image) {
|
2024-10-27 17:15:14 +00:00
|
|
|
log.Println("new filename: ", filename)
|
2024-10-26 23:47:48 +00:00
|
|
|
f, err := os.Create(filename)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("os.Create failed: %v", err)
|
|
|
|
}
|
|
|
|
defer f.Close()
|
|
|
|
err = png.Encode(f, img)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("png.Encode failed: %v", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func processImage(img image.Image, config Config) image.Image {
|
|
|
|
|
|
|
|
cArgs := config.Colorize
|
|
|
|
g := gift.New(
|
|
|
|
gift.Colorize(cArgs[0], cArgs[1], cArgs[2]),
|
|
|
|
gift.Contrast(float32(config.Contrast)),
|
|
|
|
gift.Gamma(float32(config.Gamma)),
|
|
|
|
)
|
|
|
|
|
|
|
|
dst := image.NewRGBA(g.Bounds(img.Bounds()))
|
|
|
|
g.Draw(dst, img)
|
|
|
|
|
|
|
|
return dst
|
|
|
|
}
|