Chris Mendez in NodeJS, Javascript, For Developers

NodeJS: Create a Base64 image from a PNG or JPG

There are many good reasons for converting images into Base64 including:

  • Storing an image into a NoSQL database directly.
  • Serving an image to a client browser through an API.
  • Sending an image to AWS Rekognition through a POST request.

Simple Example

var fs  = require('fs')

function base64_encode(file) {
    // read binary data
    var bitmap = fs.readFileSync(file);
    // convert binary data to base64 encoded string
    return new Buffer(bitmap).toString('base64');
}

var bitmap = base64_encode("./path/to/image.jpg");

Advanced Example

This example does the same thing but it's wrapped as a JakeJS file so that you can encode the bitmap file and save the base64 text. To make this work follow these steps:

  1. Install JakeJS npm install --save-dev jake
  • Create a Jakefile.js file.
  • Paste the code below into Jakefile.js.
  1. Run the command jake base64:encode[./path/to/bitmap/file.png]
var fs  = require('fs'),
path = require('path')

desc('Jakefile default.');
task('default', { async: true }, function(){
  //Look inside of /jakelib
})

namespace('base64', function () {
  
  desc('Create a base64 image');
  task('encode', { async: true }, function(filePath){
    // Create a base64 image
    var bitmap = encode(filePath);
    // Save base64 text.
    var t = jake.Task['base64:save'];
        t.invoke.apply(t, [filePath,bitmap]);

    // Encode the bitmap file.
    function encode(file) {
      // read binary data
      var bitmap = fs.readFileSync(file);
      // convert binary data to base64 encoded string
      return new Buffer(bitmap).toString('base64');
    }    
  });
  
  
  desc('Save a base64 image');
  task('save', { async: true }, function(filePath, base64){
    // Get name of file only
    var fileName = filePath.split("/").slice(-1)[0]
    // Create new filePath
    var textPath = path.join(".", "public", "base64", fileName + ".txt");
    
    function save(textPath){
      // Write to disk
      fs.writeFile(textPath, base64, function(err){
        if(err) return console.log(err);
        console.log("File Created: ", textPath)
      })      
    }
    
  });
});


Related