diff --git a/plugin/gif/context.go b/plugin/gif/context.go index f35a3e03..48ee25c7 100644 --- a/plugin/gif/context.go +++ b/plugin/gif/context.go @@ -20,7 +20,7 @@ func dlchan(name string, s *string, wg *sync.WaitGroup, exit func(error)) { target := datapath + `materials/` + name var err error if file.IsNotExist(target) { - err = file.DownloadTo(`https://gitcode.net/anto_july/imagematerials/-/raw/main/`+name, target, true) + err = file.DownloadTo(`https://gitcode.net/m0_60838134/imagematerials/-/raw/main/`+name, target, true) if err != nil { exit(err) return @@ -35,7 +35,7 @@ func dlchan(name string, s *string, wg *sync.WaitGroup, exit func(error)) { func dlblock(name string) (string, error) { target := datapath + `materials/` + name if file.IsNotExist(target) { - err := file.DownloadTo(`https://gitcode.net/u011570312/imagematerials/-/raw/main/`+name, target, true) + err := file.DownloadTo(`https://gitcode.net/m0_60838134/imagematerials/-/raw/main/`+name, target, true) if err != nil { return "", err } diff --git a/plugin/gif/gif.go b/plugin/gif/gif.go index 4389502c..97339bd3 100644 --- a/plugin/gif/gif.go +++ b/plugin/gif/gif.go @@ -891,3 +891,268 @@ func turn(cc *context, value ...string) (string, error) { } return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, turn)) } + +// taiguan 抬棺 +func taiguan(cc *context, value ...string) (string, error) { + _ = value + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + name := cc.usrdir + "taiguan.gif" + c := dlrange("taiguan", 20, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + tou, err := cc.getLogo(0, 0) + if err != nil { + return "", err + } + wg.Wait() + if err != nil { + return "", err + } + imgs, err := loadFirstFrames(c, 20) + if err != nil { + return "", err + } + taiguan := []*image.NRGBA{ + imgs[0].InsertUp(tou, 85, 85, 180, 65).Im, + imgs[1].InsertUp(tou, 85, 85, 180, 65).Im, + imgs[2].InsertUp(tou, 85, 85, 180, 65).Im, + imgs[3].InsertUp(tou, 85, 85, 180, 65).Im, + imgs[4].InsertUp(tou, 85, 85, 177, 65).Im, + imgs[5].InsertUp(tou, 85, 85, 175, 65).Im, + imgs[6].InsertUp(tou, 85, 85, 173, 65).Im, + imgs[7].InsertUp(tou, 85, 85, 171, 65).Im, + imgs[8].InsertUp(tou, 85, 85, 170, 65).Im, + imgs[9].InsertUp(tou, 85, 85, 170, 65).Im, + imgs[10].InsertUp(tou, 85, 85, 170, 65).Im, + imgs[11].InsertUp(tou, 85, 85, 170, 65).Im, + imgs[12].InsertUp(tou, 85, 85, 170, 65).Im, + imgs[13].InsertUp(tou, 85, 85, 170, 65).Im, + imgs[14].InsertUp(tou, 85, 85, 170, 65).Im, + imgs[15].InsertUp(tou, 85, 85, 170, 65).Im, + imgs[16].InsertUp(tou, 85, 85, 170, 65).Im, + imgs[17].InsertUp(tou, 85, 85, 170, 65).Im, + imgs[18].InsertUp(tou, 85, 85, 170, 65).Im, + imgs[19].InsertUp(tou, 85, 85, 175, 65).Im, + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, taiguan)) +} + +// zou 揍 +func zou(cc *context, value ...string) (string, error) { + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + name := cc.usrdir + "zou.gif" + c := dlrange("zou", 3, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + tou, err := cc.getLogo(100, 100) + if err != nil { + return "", err + } + tou2, err := cc.getLogo2(100, 100) + if err != nil { + return "", err + } + wg.Wait() + if err != nil { + return "", err + } + imgs, err := loadFirstFrames(c, 3) + if err != nil { + return "", err + } + zou := []*image.NRGBA{ + imgs[0].InsertUp(tou, 40, 40, 98, 138).InsertUp(tou2, 55, 55, 100, 45).Im, + imgs[1].InsertUp(tou, 40, 40, 98, 138).InsertUp(tou2, 55, 55, 101, 45).Im, + imgs[2].InsertUp(tou, 40, 40, 89, 140).InsertUp(tou2, 55, 55, 99, 40).Im, + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(8, zou)) +} + +// ci 吞 +func ci(cc *context, value ...string) (string, error) { + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + name := cc.usrdir + "ci.gif" + c := dlrange("ci", 26, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + tou, err := cc.getLogo(100, 100) + if err != nil { + return "", err + } + wg.Wait() + if err != nil { + return "", err + } + imgs, err := loadFirstFrames(c, 26) + if err != nil { + return "", err + } + ci := []*image.NRGBA{ + imgs[0].InsertBottom(tou, 25, 25, 25, 57).Im, + imgs[1].InsertBottom(tou, 25, 25, 27, 58).Im, + imgs[2].InsertBottom(tou, 25, 25, 28, 57).Im, + imgs[3].InsertBottom(tou, 25, 25, 30, 57).Im, + imgs[4].InsertBottom(tou, 25, 25, 30, 58).Im, + imgs[5].InsertBottom(tou, 25, 25, 30, 59).Im, + imgs[6].Im, + imgs[7].Im, + imgs[8].Im, + imgs[9].Im, + imgs[10].Im, + imgs[11].Im, + imgs[12].Im, + imgs[13].Im, + imgs[14].Im, + imgs[15].Im, + imgs[16].Im, + imgs[17].Im, + imgs[18].Im, + imgs[19].Im, + imgs[20].Im, + imgs[21].Im, + imgs[22].Im, + imgs[23].Im, + imgs[24].Im, + imgs[25].Im, + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, ci)) +} + +// worship 膜拜 +func worship(cc *context, value ...string) (string, error) { + _ = value + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + name := cc.usrdir + "worship.gif" + c := dlrange("worship", 9, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + face, err := gg.LoadImage(cc.headimgsdir[0]) + if err != nil { + return "", err + } + wg.Wait() + if err != nil { + return "", err + } + imgs, err := loadFirstFrames(c, 9) + if err != nil { + return "", err + } + worship := []*image.NRGBA{ + imgs[0].InsertBottom(face, 140, 140, 0, 0).Im, + imgs[1].InsertBottom(face, 140, 140, 0, 0).Im, + imgs[2].InsertBottom(face, 140, 140, 0, 0).Im, + imgs[3].InsertBottom(face, 140, 140, 0, 0).Im, + imgs[4].InsertBottom(face, 140, 140, 0, 0).Im, + imgs[5].InsertBottom(face, 140, 140, 0, 0).Im, + imgs[6].InsertBottom(face, 140, 140, 0, 0).Im, + imgs[7].InsertBottom(face, 140, 140, 0, 0).Im, + imgs[8].InsertBottom(face, 140, 140, 0, 0).Im, + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, worship)) +} + +// 2ceng 2蹭 +func ceng2(cc *context, value ...string) (string, error) { + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + name := cc.usrdir + "ceng2.gif" + c := dlrange("ceng2", 4, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + tou, err := cc.getLogo(100, 100) + if err != nil { + return "", err + } + wg.Wait() + if err != nil { + return "", err + } + imgs, err := loadFirstFrames(c, 4) + if err != nil { + return "", err + } + ceng2 := []*image.NRGBA{ + imgs[0].InsertBottom(tou, 175, 175, 78, 263).Im, + imgs[1].InsertBottom(tou, 175, 175, 78, 263).Im, + imgs[2].InsertBottom(tou, 175, 175, 78, 263).Im, + imgs[3].InsertBottom(tou, 175, 175, 78, 263).Im, + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, ceng2)) +} + +// dun 炖 +func dun(cc *context, value ...string) (string, error) { + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + name := cc.usrdir + "dun.gif" + c := dlrange("dun", 5, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + tou, err := cc.getLogo(100, 100) + if err != nil { + return "", err + } + wg.Wait() + if err != nil { + return "", err + } + imgs, err := loadFirstFrames(c, 5) + if err != nil { + return "", err + } + dun := []*image.NRGBA{ + imgs[0].InsertBottom(tou, 80, 80, 85, 45).Im, + imgs[1].InsertBottom(tou, 80, 80, 85, 45).Im, + imgs[2].InsertBottom(tou, 80, 80, 85, 45).Im, + imgs[3].InsertBottom(tou, 80, 80, 85, 45).Im, + imgs[4].InsertBottom(tou, 80, 80, 85, 45).Im, + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, dun)) +} diff --git a/plugin/gif/png.go b/plugin/gif/png.go index 4321aa28..3420eb96 100644 --- a/plugin/gif/png.go +++ b/plugin/gif/png.go @@ -162,6 +162,7 @@ func convolve3x3(cc *context, args ...string) (string, error) { // rotate 旋转,带参数暂时不用 func rotate(cc *context, args ...string) (string, error) { + _ = args name := cc.usrdir + "Rotate.png" // 加载图片 im, err := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0) @@ -175,6 +176,7 @@ func rotate(cc *context, args ...string) (string, error) { // deformation 变形,带参数暂时不用 func deformation(cc *context, args ...string) (string, error) { + _ = args name := cc.usrdir + "Deformation.png" // 加载图片 im, err := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0) @@ -251,6 +253,7 @@ func marriage(cc *context, args ...string) (string, error) { // anyasuki 阿尼亚喜欢 func anyasuki(cc *context, args ...string) (string, error) { + _ = args var wg sync.WaitGroup var m sync.Mutex var err error @@ -296,6 +299,7 @@ func anyasuki(cc *context, args ...string) (string, error) { // alwaysLike 我永远喜欢 func alwaysLike(cc *context, args ...string) (string, error) { + _ = args var wg sync.WaitGroup var m sync.Mutex var err error @@ -319,7 +323,7 @@ func alwaysLike(cc *context, args ...string) (string, error) { } canvas := gg.NewContext(830, 599) canvas.DrawImage(back, 0, 0) - canvas.DrawImage(img.Size(face, 341, 341).Im, 44, 74) + canvas.DrawImage(img.Size(face, 380, 380).Im, 44, 74) canvas.SetColor(color.Black) _, err = file.GetLazyData(text.BoldFontFile, true) if err != nil { @@ -426,6 +430,7 @@ func dontTouch(cc *context, args ...string) (string, error) { // universal 万能表情 空白表情 func universal(cc *context, args ...string) (string, error) { + _ = args name := cc.usrdir + "Universal.png" face, err := gg.LoadImage(cc.headimgsdir[0]) if err != nil { @@ -454,6 +459,7 @@ func universal(cc *context, args ...string) (string, error) { // interview 采访 func interview(cc *context, args ...string) (string, error) { + _ = args var wg sync.WaitGroup var m sync.Mutex var err error @@ -616,6 +622,7 @@ func perfect(cc *context, args ...string) (string, error) { // playGame 玩游戏 func playGame(cc *context, args ...string) (string, error) { + _ = args var wg sync.WaitGroup var m sync.Mutex var err error @@ -745,6 +752,7 @@ func prpr(cc *context, args ...string) (string, error) { // safeSense 安全感 func safeSense(cc *context, args ...string) (string, error) { + _ = args var wg sync.WaitGroup var m sync.Mutex var err error @@ -904,6 +912,7 @@ func whyatme(cc *context, args ...string) (string, error) { // makeFriend 交个朋友 func makeFriend(cc *context, args ...string) (string, error) { + _ = args var wg sync.WaitGroup var m sync.Mutex var err error @@ -980,6 +989,7 @@ func backToWork(cc *context, args ...string) (string, error) { // coupon 兑换券 func coupon(cc *context, args ...string) (string, error) { + _ = args var wg sync.WaitGroup var m sync.Mutex var err error @@ -1083,3 +1093,298 @@ func throw(cc *context, args ...string) (string, error) { imgnrgba := imgs[0].InsertUpC(img.Rotate(face, float64(rand.Intn(360)), 143, 143).Im, 0, 0, 86, 249).Im return "file:///" + name, writer.SavePNG2Path(name, imgnrgba) } + +// 远离 +func yuanli(cc *context, args ...string) (string, error) { + _ = args + var wg sync.WaitGroup + var m sync.Mutex + var err error + c := dlrange("yuanli", 1, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + imgs, err := loadFirstFrames(c, 1) + if err != nil { + return "", err + } + name := cc.usrdir + "yuanli.png" + im, err := img.LoadFirstFrame(cc.headimgsdir[0], 534, 493) + if err != nil { + return "", err + } + imgnrgba := imgs[0].InsertBottom(im.Im, 420, 420, 45, 90).Im + return "file:///" + name, writer.SavePNG2Path(name, imgnrgba) +} + +// 不是你老婆 +func nowife(cc *context, args ...string) (string, error) { + _ = args + var wg sync.WaitGroup + var m sync.Mutex + var err error + c := dlrange("nowife", 1, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + imgs, err := loadFirstFrames(c, 1) + if err != nil { + return "", err + } + name := cc.usrdir + "nowife.png" + im, err := img.LoadFirstFrame(cc.headimgsdir[0], 534, 493) + if err != nil { + return "", err + } + imgnrgba := imgs[0].InsertBottom(im.Im, 400, 400, 112, 81).Im + return "file:///" + name, writer.SavePNG2Path(name, imgnrgba) +} + +// youer 你老婆 +func youer(cc *context, args ...string) (string, error) { + _ = args + var wg sync.WaitGroup + var m sync.Mutex + var err error + c := dlrange("youer", 1, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + name := cc.usrdir + "youer.png" + back, err := gg.LoadImage(c[0]) + if err != nil { + return "", err + } + tou, err := cc.getLogo(120, 120) + if err != nil { + return "", err + } + wg.Wait() + if err != nil { + return "", err + } + canvas := gg.NewContext(690, 690) + canvas.DrawImage(back, 0, 0) + canvas.DrawImage(img.Size(tou, 350, 350).Im, 55, 165) + canvas.SetColor(color.Black) + _, err = file.GetLazyData(text.BoldFontFile, true) + if err != nil { + return "", err + } + if err = canvas.LoadFontFace(text.BoldFontFile, 56); err != nil { + return "", err + } + if args[0] == "" { + args[0] = "老婆真棒" + } + args[0] = "你的" + args[0] + l, _ := canvas.MeasureString(args[0]) + if l > 830 { + return "", errors.New("文字消息太长了") + } + canvas.DrawString(args[0], (830-l)/3.0, 630) + return "file:///" + name, canvas.SavePNG(name) +} + +// xiaotiamshi 小天使 +func xiaotianshi(cc *context, args ...string) (string, error) { + _ = args + var wg sync.WaitGroup + var m sync.Mutex + var err error + c := dlrange("xiaotianshi", 1, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + name := cc.usrdir + "xiaotianshi.png" + back, err := gg.LoadImage(c[0]) + if err != nil { + return "", err + } + face, err := gg.LoadImage(cc.headimgsdir[0]) + if err != nil { + return "", err + } + wg.Wait() + if err != nil { + return "", err + } + canvas := gg.NewContext(522, 665) + canvas.DrawImage(back, 0, 0) + canvas.DrawImage(img.Size(face, 480, 480).Im, 20, 80) + canvas.SetColor(color.Black) + _, err = file.GetLazyData(text.BoldFontFile, true) + if err != nil { + return "", err + } + if err = canvas.LoadFontFace(text.BoldFontFile, 35); err != nil { + return "", err + } + if args[0] == "" { + args[0] = "我老婆" + } + args[0] = "请问你们看到" + args[0] + "了吗?" + l, _ := canvas.MeasureString(args[0]) + if l > 830 { + return "", errors.New("文字消息太长了") + } + canvas.DrawString(args[0], (830-l)/10, 50) + return "file:///" + name, canvas.SavePNG(name) +} + +// 不要再看这些了 +func neko(cc *context, args ...string) (string, error) { + _ = args + _ = args + var wg sync.WaitGroup + var m sync.Mutex + var err error + c := dlrange("neko", 1, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + imgs, err := loadFirstFrames(c, 1) + if err != nil { + return "", err + } + name := cc.usrdir + "neko.png" + im, err := img.LoadFirstFrame(cc.headimgsdir[0], 712, 949) + if err != nil { + return "", err + } + imgnrgba := imgs[0].InsertBottom(img.Rotate(im.Im, 0, 0, 0).Im, 450, 450, 0, 170).Im + return "file:///" + name, writer.SavePNG2Path(name, imgnrgba) +} + +// 给我变 +func bian(cc *context, args ...string) (string, error) { + _ = args + _ = args + var wg sync.WaitGroup + var m sync.Mutex + var err error + c := dlrange("bian", 1, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + imgs, err := loadFirstFrames(c, 1) + if err != nil { + return "", err + } + name := cc.usrdir + "bian.png" + im, err := img.LoadFirstFrame(cc.headimgsdir[0], 640, 550) + if err != nil { + return "", err + } + imgnrgba := imgs[0].InsertBottom(img.Rotate(im.Im, 0, 0, 0).Im, 380, 380, 225, -20).Im + return "file:///" + name, writer.SavePNG2Path(name, imgnrgba) +} + +// van 玩一下 +func van(cc *context, args ...string) (string, error) { + _ = args + var wg sync.WaitGroup + var m sync.Mutex + var err error + c := dlrange("van", 1, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + name := cc.usrdir + "van.png" + back, err := gg.LoadImage(c[0]) + if err != nil { + return "", err + } + face, err := gg.LoadImage(cc.headimgsdir[0]) + if err != nil { + return "", err + } + wg.Wait() + if err != nil { + return "", err + } + canvas := gg.NewContext(522, 665) + canvas.DrawImage(back, 0, 0) + canvas.DrawImage(img.Size(face, 480, 480).Im, 20, 80) + canvas.SetColor(color.Black) + _, err = file.GetLazyData(text.BoldFontFile, true) + if err != nil { + return "", err + } + if err = canvas.LoadFontFace(text.BoldFontFile, 35); err != nil { + return "", err + } + if args[0] == "" { + args[0] = "RBQ" + } + args[0] = "请问你们看到" + args[0] + "了吗?" + l, _ := canvas.MeasureString(args[0]) + if l > 830 { + return "", errors.New("文字消息太长了") + } + canvas.DrawString(args[0], (830-l)/10, 50) + return "file:///" + name, canvas.SavePNG(name) +} + +// eihei 诶嘿 +func eihei(cc *context, args ...string) (string, error) { + _ = args + var wg sync.WaitGroup + var m sync.Mutex + var err error + c := dlrange("eihei", 1, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + imgs, err := loadFirstFrames(c, 1) + if err != nil { + return "", err + } + name := cc.usrdir + "eihei.png" + im, err := img.LoadFirstFrame(cc.headimgsdir[0], 690, 690) + if err != nil { + return "", err + } + imgnrgba := imgs[0].InsertBottom(im.Im, 450, 450, 121, 162).Im + return "file:///" + name, writer.SavePNG2Path(name, imgnrgba) +} diff --git a/plugin/gif/run.go b/plugin/gif/run.go index 6e5ea0d0..56638e04 100644 --- a/plugin/gif/run.go +++ b/plugin/gif/run.go @@ -17,6 +17,20 @@ var ( cmd = make([]string, 0) datapath string cmdMap = map[string]func(cc *context, args ...string) (string, error){ + "炖": dun, + "2蹭": ceng2, + "诶嘿": eihei, + "膜拜": worship, + "吞": ci, + "揍": zou, + "给我变": bian, + "玩一下": van, + "不要看": neko, + "小天使": xiaotianshi, + "你的": youer, + "我老婆": nowife, + "远离": yuanli, + "抬棺": taiguan, "搓": cuo, "冲": xqe, "摸": mo,