package renderer import ( "git.tuxpa.in/a/nori" "gitlab.com/gfxlabs/gfximg/apng" "image" "strings" ) func newRenderApngFunc(a *apng.APNG) nori.RenderFunc { return func(img image.Image, delay int) { fr := apng.Frame{ Image: img, DelayDenominator: 1000, } if delay != 0 { fr.DelayNumerator = uint16(delay) } a.Frames = append(a.Frames, fr) } } func RenderAnimationsApng(n *nori.Nori) ([]*apng.APNG, error) { apngs := make([]*apng.APNG, 0, len(n.Animations)) for i := range n.Animations { a, err := RenderAnimationApng(n, i) if err != nil { if strings.Contains(err.Error(), "no frame") { continue } return nil, err } apngs = append(apngs, a) } return apngs, nil } func RenderAnimationApng(n *nori.Nori, i int) (*apng.APNG, error) { a := &apng.APNG{ Frames: make([]apng.Frame, 0, len(n.Gawi.Images)), } err := nori.RenderAnimation(n, i, newRenderApngFunc(a)) if err != nil { return nil, err } return a, nil }