package main
import (
"fmt"
"github.com/Comdex/imgo"
"os"
"strings"
)
func main() {
if len(os.Args) <= 1 {
fmt.Println(`需要指定一个本地的图片文件`)
return
}
img := imgo.MustRead(os.Args[1])
text := ""
for i := 0; i < len(img); i++ {
w := img[i]
for ii := 0; ii < len(w); ii++ {
//根据色块的 RGBA 色值,进行灰度二值化
//纯绿色块是我们要标记的值
r := "0"
if w[ii][0] > 125 {
r = "1"
}
text += r
}
text += "\n"
}
//过滤杂色
text = strings.Replace(text, "10", "11", -1)
text = strings.Replace(text, "01", "11", -1)
if len(os.Args) >= 3 {
fmt.Println(text)
}
x := 50
y := 50
result := "fail"
newImg := strings.Split(text, "\n")
for i := 0; i < len(newImg); i++ {
//读取绿色块的连续值
//如果做得严格一点,需要做转置
l := len(newImg[i])
if l > 0 && strings.Count(newImg[i], "0")*4 >= len(newImg[i]) {
//不能位于边界
if i+6 > l {
y = i + 3
} else {
y = i + 6 //字符高度不变,就写死增加两个像素的偏移
}
//查找连续色块
block := "00000000"
s := strings.IndexAny(newImg[i], block)
e := strings.LastIndexAny(newImg[i], block)
x = s + (e-s+4)/2
result = "ok"
break
}
}
fmt.Printf(`{"result":"%s", "x":"%d", "y":"%d"}`, result, x, y)
fmt.Println()
}