去图片上传

拉格加尔:

我目前正在将图像上传到服务器,并执行以下操作:

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

在此处输入图片说明

这是保存的

在此处输入图片说明

不知道我在做什么错

AkiRoss:

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

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

但是你需要

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

func EncodeAll(w io.Writer, g *GIF) error EncodeAll使用给定的循环计数和帧之间的延迟,以GIF格式将图像从g写入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)
    }
}

结果:

原始图片 慢速版

边注

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章