62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/kevin/go-jdenticon/jdenticon"
|
|
)
|
|
|
|
func main() {
|
|
var (
|
|
value = flag.String("value", "", "Input value to generate identicon for (required)")
|
|
size = flag.Int("size", 200, "Size of the identicon in pixels")
|
|
format = flag.String("format", "svg", "Output format: svg or png")
|
|
output = flag.String("output", "", "Output file (if empty, prints to stdout)")
|
|
)
|
|
flag.Parse()
|
|
|
|
if *value == "" {
|
|
fmt.Fprintf(os.Stderr, "Error: -value is required\n")
|
|
flag.Usage()
|
|
os.Exit(1)
|
|
}
|
|
|
|
icon, err := jdenticon.Generate(*value, *size)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Error generating identicon: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
var result []byte
|
|
switch *format {
|
|
case "svg":
|
|
svgStr, err := icon.ToSVG()
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Error generating SVG: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
result = []byte(svgStr)
|
|
case "png":
|
|
pngBytes, err := icon.ToPNG()
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Error generating PNG: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
result = pngBytes
|
|
default:
|
|
fmt.Fprintf(os.Stderr, "Error: invalid format %s (use svg or png)\n", *format)
|
|
os.Exit(1)
|
|
}
|
|
|
|
if *output != "" {
|
|
if err := os.WriteFile(*output, result, 0644); err != nil {
|
|
fmt.Fprintf(os.Stderr, "Error writing file: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
fmt.Printf("Identicon saved to %s\n", *output)
|
|
} else {
|
|
fmt.Print(string(result))
|
|
}
|
|
} |