doouzlrvb01417498 2017-08-17 08:53
浏览 39

动画gif保存不正确

I use this snippet to save image files encoded as base64 and sent from 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)
    }

It works fine for png and jpeg but animated gif images are saved as a still image, or are not displayed at all at some image viewers. I'm wondering how can I fix this?

  • 写回答

1条回答 默认 最新

  • duanchi8836 2017-08-17 09:05
    关注

    Your Encode part is correct, however for decoding you should use image/gif package.

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

报告相同问题?

悬赏问题

  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等