package main
import (
"fmt"
"image"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"os"
"regexp"
)
var looksLikeImage = regexp.MustCompile(`\.(?i:jpe?g|png|gif)`)
type ImageSignature struct {
height int
width int
data [][]byte
Image image.Image
}
func pixel(grey float64) {
if grey < 0.1 {
fmt.Printf("@")
} else if grey < 0.2 {
fmt.Printf("%%")
} else if grey < 0.3 {
fmt.Printf("#")
} else if grey < 0.4 {
fmt.Printf("=")
} else if grey < 0.5 {
fmt.Printf("x")
} else if grey < 0.6 {
fmt.Printf("*")
} else if grey < 0.8 {
fmt.Printf(":")
} else if grey < 0.9 {
fmt.Printf(".")
} else {
fmt.Printf(" ")
}
}
func (is ImageSignature) WritePng(fileName string) {
}
func (is ImageSignature) GetData(Image image.Image) {
var i int = 0
is.width = Image.Bounds().Max.Y - Image.Bounds().Min.Y + 1
is.height = Image.Bounds().Max.X - Image.Bounds().Min.X + 1
is.data = make([][]byte, is.height)
for y := Image.Bounds().Min.Y; y < Image.Bounds().Max.Y; y++ {
var j int = 0
is.data[i] = make([]byte, is.width)
for x := Image.Bounds().Min.X; x < Image.Bounds().Max.X; x++ {
colour := Image.At(x, y)
r, g, b, _ := colour.RGBA()
grey := (0.222 * float64(r) +
0.707 * float64(g) +
0.071 * float64(b))/float64(0xffff)
is.data[i][j] = uint8(grey*256)
j++
}
i++
}
}
func makeSignature(Image image.Image) (is ImageSignature) {
is.GetData(Image)
is.WritePng("grey.png")
return is
}
func readImage(name string) {
jpeg, err := os.Open(name)
if err != nil {
fmt.Fprintf(os.Stderr, "Error opening %s: %s\n",
name, err)
return
}
defer jpeg.Close()
Image, _, err := image.Decode(jpeg)
if err != nil {
fmt.Fprintf(os.Stderr, "Error decoding %s: %s\n",
name, err);
return
}
makeSignature(Image)
}
func main() {
for _, name := range os.Args {
if looksLikeImage.MatchString(name) {
readImage(name)
}
}
}