mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-20 14:30:10 +08:00
fix(drawlots): draw gif noise
This commit is contained in:
parent
c29b1238c2
commit
68fee3532b
@ -5,8 +5,9 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"image"
|
"image"
|
||||||
"image/color"
|
"image/draw"
|
||||||
"image/gif"
|
"image/gif"
|
||||||
|
"io"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -235,20 +236,41 @@ func randGif(gifName string) (image.Image, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
im, err := gif.DecodeAll(file)
|
im, err := gif.DecodeAll(file)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
_, err = file.Seek(0, io.SeekStart)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
config, err := gif.DecodeConfig(file)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
_ = file.Close()
|
_ = file.Close()
|
||||||
if err != nil {
|
// https://zhuanlan.zhihu.com/p/27718135
|
||||||
return nil, err
|
rect := image.Rect(0, 0, config.Width, config.Height)
|
||||||
|
if rect.Min == rect.Max {
|
||||||
|
var max image.Point
|
||||||
|
for _, frame := range im.Image {
|
||||||
|
maxF := frame.Bounds().Max
|
||||||
|
if max.X < maxF.X {
|
||||||
|
max.X = maxF.X
|
||||||
}
|
}
|
||||||
/*
|
if max.Y < maxF.Y {
|
||||||
firstImg, err := imgfactory.Load(name)
|
max.Y = maxF.Y
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
v := im.Image[rand.Intn(len(im.Image))]
|
}
|
||||||
return imgfactory.Size(firstImg, firstImg.Bounds().Dx(), firstImg.Bounds().Dy()).InsertUpC(v, 0, 0, firstImg.Bounds().Dx()/2, firstImg.Bounds().Dy()/2).Clone().Image(),err
|
rect.Max = max
|
||||||
/*/
|
}
|
||||||
// 如果gif图片出现信息缺失请使用上面注释掉的代码,把下面注释了(上面代码部分图存在bug)
|
img := image.NewRGBA(rect)
|
||||||
v := im.Image[rand.Intn(len(im.Image))]
|
b := rand.Intn(len(im.Image)) + 1
|
||||||
return imgfactory.NewFactoryBG(v.Rect.Dx(), v.Rect.Dy(), color.NRGBA{0, 0, 0, 255}).InsertUp(v, 0, 0, 0, 0).Clone().Image(), err
|
a := 0
|
||||||
// */
|
if b > 8 {
|
||||||
|
a = b - 8
|
||||||
|
}
|
||||||
|
for _, srcimg := range im.Image[a:b] {
|
||||||
|
draw.Draw(img, srcimg.Bounds(), srcimg, srcimg.Rect.Min, draw.Src)
|
||||||
|
}
|
||||||
|
return img, err
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user