gpt4 book ai didi

go - 动画 gif 未正确保存

转载 作者:IT王子 更新时间:2023-10-29 01:44:39 26 4
gpt4 key购买 nike

我使用此代码段来保存编码为 base64 并从 json 发送的图像文件:

func SaveBase64ImageToDisk(imageString string) (interface{}, error) {
imageExt := strings.ToLower(strings.Split(strings.Split(imageString, ";")[0], "/")[1])
imageData := strings.Split(imageString, ";base64,")[1]
imageReader := base64.NewDecoder(base64.StdEncoding, strings.NewReader(imageData))

if decodedImage, _, err := image.Decode(imageReader); err != nil {
return nil, err
} else {
imageFileName, _ := _saveImage(imageExt, &decodedImage)

return imageFileName.(string), nil
}
}

func _saveImage(imageExt string, decodedImage *image.Image) (interface{}, error) {

dir, err := os.Getwd()
if err != nil {
log.Fatal(err)
}

path := dir + "/media/photos/"
imageFileName := getRandomFileName("randomstr") + "." + imageExt
if imageFile, err := os.Create(path + imageFileName); err != nil {
return nil, err
} else {
defer imageFile.Close()
if imageExt == "png" {
if err = png.Encode(imageFile, *decodedImage); err != nil {
return nil, err
}
} else if imageExt == "jpg" {
if err = jpeg.Encode(imageFile, *decodedImage, nil); err != nil {
return nil, err
}
} else if imageExt == "gif" {
if err = gif.Encode(imageFile, *decodedImage, nil); err != nil {
return nil, err
}
}
return imageFileName, nil
}
}

func getRandomFileName(prefix string) string {
rand.Seed(time.Now().UTC().UnixNano())
l := len(prefix)
result := make([]byte, l)
for i := 0; i < l; i++ {
result[i] = CHARS[rand.Intn(len(CHARS))]
}
return string(result)
}

它适用于 pngjpeg 但动画 gif 图像保存为静止图像,或者根本不显示图像浏览器。我想知道如何解决这个问题?

最佳答案

您的编码部分是正确的,但是对于解码您应该使用 image/gif包。

decodedImage, _, err := gif.Decode(imageReader)

关于go - 动画 gif 未正确保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45730629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com