Go Base64 Image Decode: Troubleshooting "Unknown Image Format" Error
In Go, you can decode a base64 image to obtain its width and height using the image package. However, you may encounter the "Unknown image format" error during this process.
Decoding Considerations:
To correctly decode an image, the specific image format handler must be registered. For example, to decode a PNG image, the PNG format handler should be imported using:
import _ "image/png"
Alternatively, you can use the format-specific function png.DecodeConfig().
Data URI Scheme
The base64 image data you receive is typically part of a Data URI scheme, which consists of:
To isolate the base64-encoded data, slice the string from the comma after the media type:
input := "data:image/png;base64,iVkhdfjdAjdfirtn=" b64data := input[strings.IndexByte(input, ',')+1:]
Sample Code:
Using the provided information, here's a revised code:
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") }
Note that this sample code also resizes the image using the resize package, but this is not necessary for just decoding the image config.
The above is the detailed content of Why Am I Getting an 'Unknown Image Format' Error When Decoding Base64 Images in Go?. For more information, please follow other related articles on the PHP Chinese website!