为了账号安全,请及时绑定邮箱和手机立即绑定

去图片上传

去图片上传

Go
开满天机 2022-01-17 10:04:48
我目前正在将图像上传到我的服务器,执行以下操作:func (base *GuildController) GuildLogo(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {    ...    logo, _, err := req.FormFile("logo")    defer logo.Close()    logoGif, format, err := image.Decode(logo)    if err != nil {        base.Error = "Error while decoding your guild logo"        return    }    logoImage, err := os.Create(pigo.Config.String("template")+"/public/guilds/"+ps.ByName("name")+".gif")    if err != nil {        base.Error = "Error while trying to open guild logo image"        return    }    defer logoImage.Close()    //resizedLogo := resize.Resize(64, 64, logoGif, resize.Lanczos3)    err = gif.Encode(logoImage, logoGif, &gif.Options{        256,        nil,        nil,    })    if err != nil {        base.Error = "Error while encoding your guild logo"        return    }    ...}所以一切都很好。但是 gif 会丢失动画。例如,这是我要上传的 gif这是得救的不知道我做错了什么
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

正如评论中所暗示的,您只使用一帧:


func Decode(r io.Reader) (image.Image, error)Decode 从 r 读取 GIF 图像并将第一个嵌入图像作为 image.Image 返回。


但是你需要


func DecodeAll(r io.Reader) (*GIF, error) DecodeAll 从 r 读取 GIF 图像并返回顺序帧和时序信息。



func EncodeAll(w io.Writer, g *GIF) error EncodeAll 将 g 中的图像以 GIF 格式写入 w,并具有给定的循环计数和帧之间的延迟。


详情请看这篇文章。


这是一个将图像减慢到每帧 0.5 秒的示例:


package main


import (

    "image/gif"

    "os"

)


func main() {

    logo, err := os.Open("yay.gif")

    if err != nil {

        panic(err)

    }

    defer logo.Close()


    inGif, err := gif.DecodeAll(logo)

    if err != nil {

        panic(err)

    }


    outGif, err := os.Create("done.gif")

    if err != nil {

        panic(err)

    }

    defer outGif.Close()


    for i := range inGif.Delay {

        inGif.Delay[i] = 50

    }

    if err := gif.EncodeAll(outGif, inGif); err != nil {

        panic(err)

    }

}

结果:

//img1.sycdn.imooc.com//61e4cf160001e4da02450169.jpg

//img1.sycdn.imooc.com//61e4cf160001fb2b02450169.jpg

边注

即使在我的浏览器(Firefox)中我看到输出图像动画,并且我可以看到 GIMP 中的帧,我也无法在我的桌面查看器(gifview、comix)上看到它动画。我不知道(尚)这是什么原因。


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信