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
Libérer: 2024-12-08 20:20:13
original
433 Les gens l'ont consulté

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"
Copier après la connexion

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:]
Copier après la connexion

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")
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal