fix(drawlots): draw gif noise

This commit is contained in:
源文雨 2024-05-02 22:26:26 +09:00
parent c29b1238c2
commit 68fee3532b

View File

@ -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)
_ = file.Close()
if err != nil { if err != nil {
return nil, err return nil, err
} }
/* _, err = file.Seek(0, io.SeekStart)
firstImg, err := imgfactory.Load(name) if err != nil {
if err != nil { return nil, err
return nil, err }
config, err := gif.DecodeConfig(file)
if err != nil {
return nil, err
}
_ = file.Close()
// https://zhuanlan.zhihu.com/p/27718135
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 {
max.Y = maxF.Y
}
} }
v := im.Image[rand.Intn(len(im.Image))] rect.Max = max
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 }
/*/ img := image.NewRGBA(rect)
// 如果gif图片出现信息缺失请使用上面注释掉的代码把下面注释了(上面代码部分图存在bug) b := rand.Intn(len(im.Image)) + 1
v := im.Image[rand.Intn(len(im.Image))] a := 0
return imgfactory.NewFactoryBG(v.Rect.Dx(), v.Rect.Dy(), color.NRGBA{0, 0, 0, 255}).InsertUp(v, 0, 0, 0, 0).Clone().Image(), err 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
} }