我正在上传一个图像到我的服务器,执行以下操作:
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
这是被救的那个
不知道我做错了什么
2条答案
按热度按时间33qvvth11#
正如注解中所暗示的,您只使用一个框架:
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以GIF格式将g中的图像写入到w中,并具有给定的循环计数和帧间延迟。查看this post了解详细信息。
下面是一个将图像速度降低到每帧0.5s的示例:
结果如下:
旁注
即使在我的浏览器(Firefox)中,我看到了输出图像的动画,我可以看到GIMP中的帧,我不能在我的桌面查看器(gifview,comix)上看到它的动画。我不知道这是什么原因。
xzlaal3s2#
使用gin框架上传图片。
首先创建项目目录并运行命令“go get -u github.com/gin-gonic/gin“
然后在根目录中创建assets/upload目录。
在main.go文件中添加以下代码。
然后创建一个templates目录,并在该目录中创建一个index.html文件,然后粘贴以下代码...
最后使用“go run main.go”运行应用程序并进行测试。