2017-08-17 17 views
2

私はBASE64としてエンコードおよびJSONから送信された画像ファイルを保存するには、このスニペットを使用して保存されていない:それはpngjpegのため正常に動作しますが、アニメーションgif画像が静止画として保存されているアニメーションGIF正しく

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) 
    } 

、または一部の画像閲覧者には全く表示されない。私はこれをどのように修正することができますか?

答えて

1

エンコード部分は正しいですが、デコードにはimage/gifパッケージを使用する必要があります。

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

チップをありがとう。実際には、関数は2つの値しか返さないため、 'decodedImage、err:= gif.Decode(imageReader); 'にする必要があります。私はこれを試しましたが、同じ問題が残っています:一部の画像閲覧者は、保存されたgifをまったく表示しません。 Firefoxはgifをペイントしますが、アニメーションは失われます。 – Karlom

関連する問題