2
私はBASE64としてエンコードおよびJSONから送信された画像ファイルを保存するには、このスニペットを使用して保存されていない:それはpng
とjpeg
のため正常に動作しますが、アニメーション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)
}
、または一部の画像閲覧者には全く表示されない。私はこれをどのように修正することができますか?
チップをありがとう。実際には、関数は2つの値しか返さないため、 'decodedImage、err:= gif.Decode(imageReader); 'にする必要があります。私はこれを試しましたが、同じ問題が残っています:一部の画像閲覧者は、保存されたgifをまったく表示しません。 Firefoxはgifをペイントしますが、アニメーションは失われます。 – Karlom