diff --git a/go.mod b/go.mod index 1ff7dabd..d65f7e7c 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module github.com/FloatTech/ZeroBot-Plugin go 1.17 require ( - github.com/FloatTech/AnimeAPI v1.3.0-beta8.0.20220221142239-4b5244c3be4e + github.com/FloatTech/AnimeAPI v1.3.0-beta8.0.20220222045052-a7f28580c5d8 github.com/FloatTech/sqlite v0.2.0 - github.com/FloatTech/zbputils v1.3.0-beta8.0.20220221142126-d6d123b013e2 + github.com/FloatTech/zbputils v1.3.0-beta8.0.20220221142658-9be64984adc5 github.com/antchfx/htmlquery v1.2.4 github.com/corona10/goimagehash v1.0.3 github.com/fogleman/gg v1.3.0 diff --git a/go.sum b/go.sum index b7cb615f..be9600b5 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,10 @@ -github.com/FloatTech/AnimeAPI v1.3.0-beta8.0.20220221142239-4b5244c3be4e h1:+eIhSEYF9fn/JNtnc4a3krXXDXp6Q0uewRxmDPL062s= -github.com/FloatTech/AnimeAPI v1.3.0-beta8.0.20220221142239-4b5244c3be4e/go.mod h1:rq7SYTAJmt7tIt5k4SUgANFbQtZ6obEH50t89c9ip+8= +github.com/FloatTech/AnimeAPI v1.3.0-beta8.0.20220222045052-a7f28580c5d8 h1:549qKZCemMWO6iBg/3w0XwCeHL46HFsajtoCIvq6TSU= +github.com/FloatTech/AnimeAPI v1.3.0-beta8.0.20220222045052-a7f28580c5d8/go.mod h1:KGZ/fb3ggu0YMeG/Pa1Ei2mtV1ebVdnvVW3gcUgBDQw= github.com/FloatTech/bot-manager v1.0.0/go.mod h1:8YYRJ16oroGHQGD2En0oVnmcKJkxR9O/jd5BPSfWfOQ= github.com/FloatTech/sqlite v0.2.0 h1:x3uls/hExXH1+bbaNLkvilce6ATtWlDx4IqoxBW/bv8= github.com/FloatTech/sqlite v0.2.0/go.mod h1:xIDWIvpOFl8AXmZm0FC8t3PZjiR6ZutytCpBv2EWCns= -github.com/FloatTech/zbputils v1.3.0-beta8.0.20220221142126-d6d123b013e2 h1:E3k2HWTiJfmAM+bnTucvHZGeEEU/M88aFMfTGo+2wNQ= -github.com/FloatTech/zbputils v1.3.0-beta8.0.20220221142126-d6d123b013e2/go.mod h1:lNDjXvvNHlo4LHiAMyP/FVWcvw6kWB5onuQ024QvHfw= +github.com/FloatTech/zbputils v1.3.0-beta8.0.20220221142658-9be64984adc5 h1:f1ZQ3Yvi92MqTKI0gqDlCqSHPUoEr5MFAKW8TB9wk9M= +github.com/FloatTech/zbputils v1.3.0-beta8.0.20220221142658-9be64984adc5/go.mod h1:lNDjXvvNHlo4LHiAMyP/FVWcvw6kWB5onuQ024QvHfw= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc h1:AAx50/fb/xS4lvsdQg+bFbGvqSDhyV1MF+p2PLCamZ0= github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc/go.mod h1:OMmITAib6POA37xCichWM0aRnoVpSMZO1rB/G01wrr0= diff --git a/plugin_scale/main.go b/plugin_scale/main.go index 77548237..965f4988 100644 --- a/plugin_scale/main.go +++ b/plugin_scale/main.go @@ -4,20 +4,31 @@ package scale import ( "bytes" "image" + "math" "os" "strconv" "time" - "github.com/FloatTech/AnimeAPI/nsfw" - "github.com/FloatTech/AnimeAPI/scale" - "github.com/FloatTech/zbputils/control" - "github.com/FloatTech/zbputils/ctxext" - "github.com/FloatTech/zbputils/file" - "github.com/FloatTech/zbputils/web" + _ "image/gif" // import gif decoding + _ "image/jpeg" // import jpg decoding + _ "image/png" // import png decoding + + _ "golang.org/x/image/webp" // import webp decoding + zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" + "github.com/FloatTech/AnimeAPI/nsfw" + "github.com/FloatTech/AnimeAPI/scale" + + "github.com/FloatTech/zbputils/binary" + "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/control/order" + "github.com/FloatTech/zbputils/ctxext" + "github.com/FloatTech/zbputils/file" + "github.com/FloatTech/zbputils/img" + "github.com/FloatTech/zbputils/img/writer" + "github.com/FloatTech/zbputils/web" ) func init() { @@ -40,6 +51,7 @@ func init() { datachan <- d }() ctx.SendChain(message.Text("少女祈祷中...")) + p, err := nsfw.Classify(url[0]) if err != nil { ctx.SendChain(message.Text("ERROR:", err)) @@ -49,6 +61,7 @@ func init() { ctx.SendChain(message.Text("请发送二次元图片!")) return } + data := <-datachan if errsub != nil { ctx.SendChain(message.Text("ERROR:", errsub)) @@ -59,16 +72,31 @@ func init() { ctx.SendChain(message.Text("ERROR:", err)) return } - if im.Bounds().Size().X*im.Bounds().Size().Y > 512*512 { - ctx.SendChain(message.Text("图片过大!")) - return - } + px := im.Bounds().Size().X * im.Bounds().Size().Y paras := ctx.State["scale_paras"].([2]int) - data, err = scale.Get(url[0], paras[0], paras[1], 2) + + if px > 512*512 { + px = int(math.Pow(float64(px), 0.5) + 0.5) + x := im.Bounds().Size().X * px / 512 + y := im.Bounds().Size().Y * px / 512 + ctx.SendChain(message.Text("图片", im.Bounds().Size().X, "x", im.Bounds().Size().Y, "过大,调整图片至", x, "x", y)) + im = img.Size(im, x, y).Im + w := binary.SelectWriter() + defer binary.PutWriter(w) + _, err = writer.WriteTo(im, w) + if err != nil { + ctx.SendChain(message.Text("ERROR:", err)) + return + } + data, err = scale.Post(bytes.NewReader(w.Bytes()), paras[0], paras[1], 2) + } else { + data, err = scale.Get(url[0], paras[0], paras[1], 2) + } if err != nil { ctx.SendChain(message.Text("ERROR:", err)) return } + n := cachedir + strconv.Itoa(int(ctx.Event.UserID)) f, err := os.Create(n) if err != nil {