Nodejs resize images same size by Jimp



About JIMP:

JavaScript Image Manipulation Program


The "JavaScript Image Manipulation Program" :-)

An image processing library for Node written entirely in JavaScript, with zero native dependencies.

The default jimp configuration.


More and example: https://www.npmjs.com/package/jimp

Nodejs resize images same size by Jimp: (batch change photos to the same size)

Need find max size of images (max height and max width) in folder and then resize (creat file "./jimp.js")
//
const Jimp = require("jimp");

module.exports.findMaxSz = async function (arrFile) {
  var image, x=0, y=0;
  var images= [];
  for (var i = 0; i < arrFile.length; i++) {
    image = await Jimp.read(arrFile[i].path);
    images.push({
      jimp: image,
      path: arrFile[i].path,
      caption: arrFile[i].caption
    });
    if(!x || x<image.bitmap.width) x= image.bitmap.width;
    if(!y || y<image.bitmap.height) y= image.bitmap.height;
  }
  return {
    width: x,
    height: y,
    images
  }
};

module.exports.reSize = async function (x, y, opt, bg, text) {
  // bg: 'black'
  var image2= opt.jimp;
  if(image2.bitmap.width==x && image2.bitmap.height== y) {
    if(text) {
      var font = await Jimp.loadFont(Jimp.FONT_SANS_32_WHITE);
      image2.print(font, 0, 0, {
        text,
        alignmentX: Jimp.HORIZONTAL_ALIGN_RIGHT,
        alignmentY: Jimp.VERTICAL_ALIGN_BOTTOM
      }, image2.bitmap.width, image2.bitmap.height);
      console.log('texted and saved done!');
      return image2.write(opt.path); // save
    }
    else return '_';
  }
  var image = await Jimp.read(x, y, bg);
  await image.composite(image2, Math.abs(x - image2.bitmap.width) / 2, Math.abs(y - image2.bitmap.height) / 2, [
    {
      mode: Jimp.BLEND_SCREEN,
      opacitySource: 0.1,
      opacityDest: 1
    }
  ]);

  if(text) {
    var font = await Jimp.loadFont(Jimp.FONT_SANS_32_WHITE);
    image.print(font, 0, 0, {
      text,
      alignmentX: Jimp.HORIZONTAL_ALIGN_RIGHT,
      alignmentY: Jimp.VERTICAL_ALIGN_BOTTOM
    }, image.bitmap.width, image.bitmap.height);
  }
  console.log('resized, texted and saved done!');
  return image.write(opt.path); // save
}
//


Example:
//
var images = [];
const fs = require('fs');
fs.readdirSync('anh').forEach(function (el, idx) {
  images.push({
    path: __dirname + '\\images\\' + el,
    caption: 'by Nodejs Auto'
  })
});
const meJimp= require('./jimp');
; (async function () {
  var a = await meJimp.findMaxSz(images);
  for(var i=0; i< a.images.length; i++){
    await meJimp.reSize(a.width, a.height, a.images[i], 'black', a.images[i].caption);
  }
})().catch(function(_ex){
  console.error(_ex);
});
//

Comments