/
blur.go
68 lines (53 loc) · 1.35 KB
/
blur.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package cmd
import (
"os"
"hawx.me/code/hadfield"
"hawx.me/code/img/blur"
"hawx.me/code/img/utils"
)
var (
blurRadius int
blurStyle string
blurBox bool
blurGaussian float64
)
func Blur() *hadfield.Command {
cmd := &hadfield.Command{
Usage: "blur [options]",
Short: "blur an image",
Long: `
Blur takes an image from STDIN, and prints a blurred version to STDOUT.
--radius <r> # Set radius of blur (default: 2.0)
--style <option> # Either clamp, ignore or wrap (default: ignore)
--box # Perform box blur
--gaussian <sigma> # Perform gaussian blur (default: 5.0)
`,
}
cmd.Run = runBlur
cmd.Flag.IntVar(&blurRadius, "radius", 2.0, "")
cmd.Flag.StringVar(&blurStyle, "style", "ignore", "")
cmd.Flag.BoolVar(&blurBox, "box", false, "")
cmd.Flag.Float64Var(&blurGaussian, "gaussian", 5.0, "")
return cmd
}
func runBlur(cmd *hadfield.Command, args []string) {
var style blur.Style
switch blurStyle {
case "clamp":
style = blur.CLAMP
case "ignore":
style = blur.IGNORE
case "wrap":
style = blur.WRAP
default:
utils.Warn("--style must be one of 'clamp', 'ignore' or 'wrap'")
os.Exit(2)
}
i, data := utils.ReadStdin()
if blurBox {
i = blur.Box(i, blurRadius, style)
} else {
i = blur.Gaussian(i, blurRadius, blurGaussian, style)
}
utils.WriteStdout(i, data)
}