Golang : Encode image to base64 example

We will learn how to convert an image to base64 encoded string in this tutorial. Converting image data to base64 string can be useful in situations such as - you do not want to store the image as file, image is only one-time usage or you want to embed the image directly into an HTML document. For examples, applications like QR code generation, web image capture for chat application or sensitive data that requires short live time.

Below is an example on how to convert an image file to base64 encoded string. You can modify this code to handle image created on the spot and without needing to store in file first. For instance, QR code generation. ( see https://www.socketloop.com/tutorials/golang-how-to-generate-qr-codes )

Here you go!

 package main

 import (

 func Home(w http.ResponseWriter, r *http.Request) {
  imgFile, err := os.Open("QrImgGA.png") // a QR code image

  if err != nil {

  defer imgFile.Close()

  // create a new buffer base on file size
  fInfo, _ := imgFile.Stat()
  var size int64 = fInfo.Size()
  buf := make([]byte, size)

  // read file content into buffer
  fReader := bufio.NewReader(imgFile)

  // if you create a new image instead of loading from file, encode the image to buffer instead with png.Encode()

  // png.Encode(&buf, image)

  // convert the buffer bytes to base64 string - use buf.Bytes() for new image
  imgBase64Str := base64.StdEncoding.EncodeToString(buf)

  // Embed into an html without PNG file
  img2html := "<html><body><img src=\"data:image/png;base64," + imgBase64Str + "\" /></body></html>"



 func main() {
  // http.Handler
  mux := http.NewServeMux()
  mux.HandleFunc("/", Home)

  http.ListenAndServe(":8080", mux)

Sample output :

  See also : Golang : How to generate QR codes?

By Adam Ng

IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.