gopaper/image.go

61 lines
1.1 KiB
Go
Raw Normal View History

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
}