Maison >développement back-end >Golang >Pourquoi est-ce que j'obtiens une erreur « Format d'image inconnu » lors du décodage d'images Base64 dans Go ?

Pourquoi est-ce que j'obtiens une erreur « Format d'image inconnu » lors du décodage d'images Base64 dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-08 20:20:13484parcourir

Why Am I Getting an

Décodement d'image Go Base64 : Dépannage de l'erreur "Format d'image inconnu"

Dans Go, vous pouvez décoder une image base64 pour obtenir sa largeur et hauteur en utilisant le package image. Cependant, vous pouvez rencontrer l'erreur « Format d'image inconnu » au cours de ce processus.

Considérations sur le décodage :

Pour décoder correctement une image, le gestionnaire de format d'image spécifique doit être inscrit. Par exemple, pour décoder une image PNG, le gestionnaire de format PNG doit être importé en utilisant :

import _ "image/png"

Vous pouvez également utiliser la fonction spécifique au format png.DecodeConfig().

Schéma d'URI de données

Les données d'image base64 que vous recevez font généralement partie d'un schéma d'URI de données, qui consiste de :

  1. Type de schéma de données : données :
  2. Type de média : image/png
  3. Données d'image codées en base64

À isoler les données codées en base64, découper la chaîne de la virgule après le média tapez :

input := "data:image/png;base64,iVkhdfjdAjdfirtn="
b64data := input[strings.IndexByte(input, ',')+1:]

Exemple de code :

À l'aide des informations fournies, voici un code révisé :

package main

import (
    "fmt"
    "image/png"
    "log"
    "os"
    "strings"

    "github.com/nfnt/resize"
)

func main() {
    dataURL := os.Getenv("IMAGE_DATA_URL")

    if dataURL == "" {
        log.Fatal("Missing IMAGE_DATA_URL environment variable")
    }

    // Remove Data URI scheme prefix
    b64data := dataURL[strings.IndexByte(dataURL, ',')+1:]

    // Decode base64 string
    reader := base64.NewDecoder(base64.StdEncoding, strings.NewReader(b64data))

    // Register PNG format handler and decode the image config
    _ = png.RegisterFormat("png", "png", png.PNGConfig{})
    config, _, err := image.DecodeConfig(reader)
    if err != nil {
        log.Fatal(err)
    }

    // Resize the image
    newSize := resize.Thumbnail(0, 0, config.Width, config.Height)
    scaledImage := resize.Resize(uint(newSize.Width), uint(newSize.Height), reader, resize.Lanczos3)

    // Save the resized image
    outFile, err := os.Create("resized-image.png")
    if err != nil {
        log.Fatal(err)
    }

    err = png.Encode(outFile, scaledImage)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Image saved to: %s", "resized-image.png")
}

Notez que cet exemple de code redimensionne également l'image à l'aide du package resize, mais cela n'est pas nécessaire pour simplement décoder la configuration de l'image.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn