image - 去图片上传

标签 image go gif animated-gif

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

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

enter image description here

这是保存的

enter image description here

不知道我做错了什么

最佳答案

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

func Decode(r io.Reader) (image.Image, error) Decode reads a GIF image from r and returns the first embedded image as an image.Image.

但是你需要

func DecodeAll(r io.Reader) (*GIF, error) DecodeAll reads a GIF image from r and returns the sequential frames and timing information.

func EncodeAll(w io.Writer, g *GIF) error EncodeAll writes the images in g to w in GIF format with the given loop count and delay between frames.

this post了解详情。

这是一个将图像减慢到每帧 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)
    }
}

结果:

Original Image Slowed-down version

旁注

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

关于image - 去图片上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37529227/

相关文章:

c++ - 获取 stb_image 中某个像素的 RGB

css - 如何使用 svg 形状来遮盖图像?

go - gocron使用参数动态添加和删除任务

go - 如何计算文本中每个单词的出现次数

animation - 具有广泛浏览器支持的动画 gif 替代品?

xml - UPS API - 打印返回的运输标签 GIF 数据

python - 如何在python中按名称对多个图像进行聚类

ios - 在 iOS 中使用照片保存位置 exif 数据

json - 用于结构的 Golang JSON - 错误消息

ios - 获取保存在 iPhone/iPad 相机胶卷上的所有 GIF 图片