gif系列,新增,更新旧的素材 (#373)

This commit is contained in:
尐酱油 2022-08-16 10:40:28 +08:00 committed by GitHub
parent 03fc569f87
commit 962c48ca36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 460 additions and 10 deletions

View File

@ -1154,3 +1154,297 @@ func dun(cc *context, value ...string) (string, error) {
}
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, dun))
}
// push 滚高清重置版 过渡
func push(cc *context, value ...string) (string, error) {
_ = value
var wg sync.WaitGroup
var err error
var m sync.Mutex
piclen := 16
name := cc.usrdir + "push.gif"
c := dlrange("push", piclen, &wg, func(e error) {
m.Lock()
err = e
m.Unlock()
})
if err != nil {
return "", err
}
wg.Wait()
tou, err := cc.getLogo(0, 0)
if err != nil {
return "", err
}
imgs, err := loadFirstFrames(c, piclen)
if err != nil {
return "", err
}
push := make([]*image.NRGBA, piclen)
for i := 0; i < piclen; i++ {
push[i] = imgs[i].InsertUpC(img.Rotate(tou, float64(-22*i), 280, 280).Im, 0, 0, 523, 291).Im
}
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, push))
}
// peng 砰
func peng(cc *context, value ...string) (string, error) {
_ = value
var wg sync.WaitGroup
var err error
var m sync.Mutex
name := cc.usrdir + "peng.gif"
c := dlrange("peng", 25, &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
}
m1 := img.Rotate(tou, 1, 80, 80)
m2 := img.Rotate(tou, 30, 80, 80)
m3 := img.Rotate(tou, 45, 85, 85)
m4 := img.Rotate(tou, 90, 80, 80)
wg.Wait()
if err != nil {
return "", err
}
imgs, err := loadFirstFrames(c, 25)
if err != nil {
return "", err
}
peng := []*image.NRGBA{
imgs[0].Im,
imgs[1].Im,
imgs[2].Im,
imgs[3].Im,
imgs[4].Im,
imgs[5].Im,
imgs[6].Im,
imgs[7].InsertUp(m1.Im, 0, 0, 205, 80).Im,
imgs[8].InsertUp(m1.Im, 0, 0, 205, 80).Im,
imgs[9].InsertUp(m1.Im, 0, 0, 205, 80).Im,
imgs[10].InsertUp(m1.Im, 0, 0, 205, 80).Im,
imgs[11].InsertUp(m1.Im, 0, 0, 205, 80).Im,
imgs[12].InsertUp(m1.Im, 0, 0, 205, 80).Im,
imgs[13].InsertUp(m1.Im, 0, 0, 205, 80).Im,
imgs[14].InsertUp(m1.Im, 0, 0, 205, 80).Im,
imgs[15].InsertUp(m1.Im, 0, 0, 205, 80).Im,
imgs[16].InsertUp(m1.Im, 0, 0, 200, 80).Im,
imgs[17].InsertUp(m2.Im, 0, 0, 169, 65).Im,
imgs[18].InsertUp(m2.Im, 0, 0, 160, 69).Im,
imgs[19].InsertUp(m3.Im, 0, 0, 113, 90).Im,
imgs[20].InsertUp(m4.Im, 0, 0, 89, 159).Im,
imgs[21].InsertUp(m4.Im, 0, 0, 89, 159).Im,
imgs[22].InsertUp(m4.Im, 0, 0, 86, 160).Im,
imgs[23].InsertUp(m4.Im, 0, 0, 89, 159).Im,
imgs[24].InsertUp(m4.Im, 0, 0, 86, 160).Im,
}
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(8, peng))
}
// klee 可莉吃
func klee(cc *context, value ...string) (string, error) {
_ = value
var wg sync.WaitGroup
var err error
var m sync.Mutex
piclen := 31
name := cc.usrdir + "klee.gif"
c := dlrange("klee", piclen, &wg, func(e error) {
m.Lock()
err = e
m.Unlock()
})
if err != nil {
return "", err
}
wg.Wait()
im, err := img.LoadFirstFrame(cc.headimgsdir[0], 82, 83)
if err != nil {
return "", err
}
locs := [][]int{{0, 174}, {0, 174}, {0, 174}, {0, 174}, {0, 174}, {12, 160}, {19, 152}, {23, 148}, {26, 145}, {32, 140}, {37, 136}, {42, 131}, {49, 127}, {70, 126}, {88, 128}, {-30, 210}, {-19, 207}, {-14, 200}, {-10, 188}, {-7, 179}, {-3, 170}, {-3, 175}, {-1, 174}, {0, 174}, {0, 174}, {0, 174}, {0, 174}, {0, 174}, {0, 174}, {0, 174}, {0, 174}}
imgs, err := loadFirstFrames(c, piclen)
if err != nil {
return "", err
}
klee := make([]*image.NRGBA, piclen)
for i := 0; i < piclen; i++ {
klee[i] = imgs[i].InsertBottom(im.Im, 0, 0, locs[i][0], locs[i][1]).Im
}
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, klee))
}
// hutaoken 胡桃啃
func hutaoken(cc *context, value ...string) (string, error) {
_ = value
var wg sync.WaitGroup
var err error
var m sync.Mutex
name := cc.usrdir + "hutaoken.gif"
c := dlrange("hutaoken", 2, &wg, func(e error) {
m.Lock()
err = e
m.Unlock()
})
if err != nil {
return "", err
}
tou, err := cc.getLogo(55, 55)
if err != nil {
return "", err
}
wg.Wait()
if err != nil {
return "", err
}
imgs, err := loadFirstFrames(c, 2)
if err != nil {
return "", err
}
hutaoken := []*image.NRGBA{
imgs[0].InsertBottom(tou, 98, 101, 108, 234).Im,
imgs[1].InsertBottom(tou, 96, 100, 108, 237).Im,
}
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(8, hutaoken))
}
// lick 2舔
func lick(cc *context, value ...string) (string, error) {
_ = value
var wg sync.WaitGroup
var err error
var m sync.Mutex
name := cc.usrdir + "lick.gif"
c := dlrange("lick", 2, &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
}
imgs, err := loadFirstFrames(c, 2)
if err != nil {
return "", err
}
lick := []*image.NRGBA{
imgs[0].InsertUp(tou, 44, 44, 10, 138).Im,
imgs[1].InsertUp(tou, 44, 44, 10, 138).Im,
}
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(8, lick))
}
// tiqiu 踢球
func tiqiu(cc *context, value ...string) (string, error) {
_ = value
var wg sync.WaitGroup
var err error
var m sync.Mutex
piclen := 15
name := cc.usrdir + "tiqiu.gif"
c := dlrange("tiqiu", piclen, &wg, func(e error) {
m.Lock()
err = e
m.Unlock()
})
if err != nil {
return "", err
}
wg.Wait()
tou, err := cc.getLogo(78, 78)
if err != nil {
return "", err
}
locs := [][]int{{58, 137}, {57, 118}, {56, 100}, {53, 114}, {51, 127}, {49, 140}, {48, 113}, {48, 86}, {48, 58}, {49, 98}, {51, 137}, {52, 177}, {53, 170}, {56, 182}, {59, 154}}
imgs, err := loadFirstFrames(c, piclen)
if err != nil {
return "", err
}
tiqiu := make([]*image.NRGBA, piclen)
for i := 0; i < piclen; i++ {
tiqiu[i] = imgs[i].InsertUpC(img.Rotate(tou, float64(-24*i), 0, 0).Im, 0, 0, locs[i][0]+38, locs[i][1]+38).Im
}
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, tiqiu))
}
// cai 踩
func cai(cc *context, value ...string) (string, error) {
_ = value
var wg sync.WaitGroup
var err error
var m sync.Mutex
name := cc.usrdir + "cai.gif"
c := dlrange("cai", 5, &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, 5)
if err != nil {
return "", err
}
m1 := img.Rotate(tou, -20, 130, 80)
cai := []*image.NRGBA{
imgs[0].InsertBottom(m1.Im, 123, 105, 39, 188).Im,
imgs[1].InsertBottom(m1.Im, 123, 105, 39, 188).Im,
imgs[2].InsertBottom(tou, 90, 71, 50, 209).Im,
imgs[3].InsertBottom(tou, 85, 76, 52, 203).Im,
imgs[4].InsertBottom(tou, 88, 82, 49, 198).Im,
}
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, cai))
}
// whir 2转
func whirl(cc *context, value ...string) (string, error) {
_ = value
var wg sync.WaitGroup
var err error
var m sync.Mutex
piclen := 15
name := cc.usrdir + "whirl.gif"
c := dlrange("whirl", piclen, &wg, func(e error) {
m.Lock()
err = e
m.Unlock()
})
if err != nil {
return "", err
}
wg.Wait()
tou, err := cc.getLogo(0, 0)
if err != nil {
return "", err
}
imgs, err := loadFirstFrames(c, piclen)
if err != nil {
return "", err
}
whirl := make([]*image.NRGBA, piclen)
for i := 0; i < piclen; i++ {
whirl[i] = imgs[i].InsertUpC(img.Rotate(tou, float64(-24*i), 145, 145).Im, 0, 0, 115, 89).Im
}
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, whirl))
}

View File

@ -24,7 +24,7 @@ func pa(cc *context, args ...string) (string, error) {
return "", err
}
// 随机爬图序号
rand := rand.Intn(60) + 1
rand := rand.Intn(92) + 1
if file.IsNotExist(datapath + "materials/pa") {
err = os.MkdirAll(datapath+"materials/pa", 0755)
if err != nil {
@ -39,7 +39,7 @@ func pa(cc *context, args ...string) (string, error) {
if err != nil {
return "", err
}
return "file:///" + name, writer.SavePNG2Path(name, imgf.InsertBottom(tou, 100, 100, 0, 400).Im)
return "file:///" + name, writer.SavePNG2Path(name, imgf.InsertUp(tou, 100, 100, 0, 400).Im)
}
// si 撕
@ -1385,3 +1385,139 @@ func eihei(cc *context, args ...string) (string, error) {
imgnrgba := imgs[0].InsertBottom(im.Im, 450, 450, 121, 162).Im
return "file:///" + name, writer.SavePNG2Path(name, imgnrgba)
}
// fanfa 犯法
func fanfa(cc *context, args ...string) (string, error) {
_ = args
var wg sync.WaitGroup
var m sync.Mutex
var err error
c := dlrange("fanfa", 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 + "fanfa.png"
face, err := cc.getLogo(0, 0)
if err != nil {
return "", err
}
m1 := img.Rotate(face, 45, 110, 110)
imgnrgba := imgs[0].InsertUp(m1.Im, 0, 0, 125, 360).Im
return "file:///" + name, writer.SavePNG2Path(name, imgnrgba)
}
// huai 怀
func huai(cc *context, args ...string) (string, error) {
_ = args
var wg sync.WaitGroup
var m sync.Mutex
var err error
c := dlrange("huai", 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 + "huai.png"
im, err := img.LoadFirstFrame(cc.headimgsdir[0], 640, 640)
if err != nil {
return "", err
}
imgnrgba := imgs[0].InsertBottom(im.Im, 640, 640, 0, 0).Im
return "file:///" + name, writer.SavePNG2Path(name, imgnrgba)
}
// haowan 好玩
func haowan(cc *context, args ...string) (string, error) {
_ = args
var wg sync.WaitGroup
var m sync.Mutex
var err error
c := dlrange("haowan", 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 + "haowan.png"
face, err := cc.getLogo(0, 0)
if err != nil {
return "", err
}
imgnrgba := imgs[0].InsertBottom(face, 90, 90, 321, 172).Im
return "file:///" + name, writer.SavePNG2Path(name, imgnrgba)
}
// mengbi 蒙蔽
func mengbi(cc *context, args ...string) (string, error) {
_ = args
var wg sync.WaitGroup
var m sync.Mutex
var err error
c := dlrange("mengbi", 1, &wg, func(e error) {
m.Lock()
err = e
m.Unlock()
})
if err != nil {
return "", err
}
wg.Wait()
name := cc.usrdir + "mengbi.png"
back, err := gg.LoadImage(c[0])
if err != nil {
return "", err
}
face, err := cc.getLogo(0, 0)
if err != nil {
return "", err
}
wg.Wait()
if err != nil {
return "", err
}
canvas := gg.NewContext(1080, 1080)
canvas.DrawImage(back, 0, 0)
canvas.DrawImage(img.Size(face, 100, 100).Im, 392, 460)
canvas.DrawImage(img.Size(face, 100, 100).Im, 606, 443)
canvas.SetColor(color.Black)
_, err = file.GetLazyData(text.BoldFontFile, true)
if err != nil {
return "", err
}
if err = canvas.LoadFontFace(text.BoldFontFile, 80); err != nil {
return "", err
}
if args[0] == "" {
args[0] = ""
}
l, _ := canvas.MeasureString(args[0])
if l > 1080 {
return "", errors.New("文字消息太长了")
}
canvas.DrawString(args[0], (1080-l)/2, 1000)
return "file:///" + name, canvas.SavePNG(name)
}

View File

@ -92,6 +92,18 @@ var (
"紧贴": tightly,
"紧紧贴着": tightly,
"转": turn,
"蒙蔽": mengbi,
"踩": cai,
"好玩": haowan,
"2转": whirl,
"2滚": push,
"踢球": tiqiu,
"2舔": lick,
"可莉吃": klee,
"胡桃啃": hutaoken,
"怀": huai,
"砰": peng,
"你犯法了": fanfa,
"炖": dun,
"2蹭": ceng2,
"诶嘿": eihei,
@ -115,12 +127,20 @@ func init() { // 插件主体
}
en := control.Register("gif", &ctrl.Options[*zero.Ctx]{
DisableOnDefault: false,
Help: "制图\n- 搓\n- 冲\n- 摸\n- 拍\n- 丢\n- 吃\n- 敲\n- 啃\n- 蹭\n- 爬\n- 撕\n- 灰度\n- 上翻|下翻\n" +
"- 左翻|右翻\n- 反色\n- 浮雕\n- 打码\n- 负片\n- 旋转 45\n- 变形 100 100\n- 亲\n- 结婚申请|结婚登记\n- 阿尼亚喜欢\n- 像只\n" +
"- 我永远喜欢|永远喜欢\n- 像样的亲亲\n- 国旗\n- 不要靠近\n- 万能表情|空白表情\n- 采访\n- 需要|你可能需要\n- 这像画吗\n- 小画家\n" +
"- 完美\n- 玩游戏\n- 出警\n- 警察\n- 舔|舔屏|prpr\n- 安全感\n- 精神支柱\n- 想什么\n- 墙纸\n- 为什么at我\n- 交个朋友\n- 打工人|继续干活\n" +
"- 兑换券\n- 注意力涣散\n- 垃圾桶|垃圾\n- 捶\n- 啾啾\n- 2敲\n- 听音乐\n- 永远爱你\n- 2拍\n- 顶\n- 捣\n- 打拳\n- 滚\n- 吸|嗦\n- 扔\n" +
"- 锤\n- 紧贴|紧紧贴着\n- 转\n- 炖\n- 2蹭\n- 诶嘿\n- 膜拜\n- 吞\n- 揍\n- 给我变\n- 玩一下\n- 不要看\n- 小天使\n- 你的\n- 我老婆\n- 远离\n- 抬棺\n",
Help: "GIF制图命令后艾特群友/QQ号/一张图方可触发命令\n其中XXX可以为任何文字可以不写\n对机器人操作请先艾特机器人再执行命令\n" +
"- 搓|-冲|-摸|-拍|-丢|-吃|-敲|-啃|-蹭|-爬|-撕|-灰度|-上翻|-下翻\n" +
"- 左翻|-右翻|-反色|-浮雕|- 打码|- 负片|- 旋转|- 变形|- 亲\n" +
"- 结婚申请|结婚登记|- 阿尼亚喜欢XXX|- 像只|- 我永远喜欢XXX\n" +
"- 像样的亲亲|- 国旗|- 不要靠近|- 万能表情|-空白表情|- 采访\n" +
"- 需要|-你可能需要|- 这像画吗|- 小画家|- 完美|- 玩游戏|- 出警\n" +
"- 警察|- 舔|舔屏|prpr|- 安全感|- 精神支柱|- 想什么|- 墙纸\n" +
"- 为什么at我|- 交个朋友|- 打工人|-继续干活|- 兑换券|- 炖\n" +
"- 垃圾桶|- 垃圾|- 捶|- 啾啾|- 2敲|- 听音乐|- 永远爱你|- 2拍\n" +
"- 顶|- 捣|- 打拳|- 滚|- 吸|- 嗦|- 扔|- 锤|- 紧贴|紧紧贴着|- 转\n" +
"- 抬棺|- 远离|- 我老婆|- 小天使XXX|- 你的XXX|- 不要看\n" +
"- 玩一下XXX|- 给我变|- 揍|- 吞|- 膜拜|- 诶嘿|- 2蹭|- 你犯法了\n" +
"- 砰|- 注意力涣散|- 蒙蔽|- 踩|- 好玩|- 2转|- 踢球|- 2舔|\n" +
"- 可莉吃|- 胡桃啃|- 怀",
PrivateDataFolder: "gif",
}).ApplySingle(ctxext.DefaultSingle)
datapath = file.BOTPATH + "/" + en.DataFolder()

View File

@ -21,7 +21,7 @@ import (
const bed = "https://gitcode.net/u011570312/OguraHyakuninIsshu/-/raw/master/"
//nolint: asciicheck
// nolint: asciicheck
type line struct {
番号, 歌人, 上の句, 下の句, 上の句ひらがな, 下の句ひらがな string
}

View File

@ -29,7 +29,7 @@ import (
"github.com/FloatTech/zbputils/img/writer"
)
//nolint: asciicheck
// nolint: asciicheck
type 婚姻登记 struct {
db *sql.Sqlite
dbmu sync.RWMutex