Note: This site is currently "Under construction". I'm migrating to a new version of my site building software. Lots of things are in a state of disrepair as a result (for example, footnote links aren't working). It's all part of the process of building in public. Most things should still be readable though.

Tint An Image With The Node Sharp Module

Install sharp with:

Code

npm i sharp

Then do something like:

Code

const sharp = require('sharp')

async function tintImage() {
  const inputPath = 'source.jpg'
  const color = '#372831'
  const outputPath = 'output.jpg'
  await sharp(inputPath).tint(color).toFile(outputPath)
}

tintImage()

Here's the one that I use to make random color show art for my podcast. It checks to make sure the file doesn't exist before making one with a random color. That way I can delete any I don't like and rerun the process to make new ones without messing with the existing ones I do like.

Code

#!/usr/bin/env node

const sharp = require('sharp')
const fs = require('fs')

async function makeImage(indx, show) {
  const outputPath =
    show === 'a'
      ? `output/ThePodOfAlan--S1-E${indx}a--MainShow--ShowArt.jpg`
      : `output/ThePodOfAlan--S1-E${indx}b--AfterShow--ShowArt.jpg`
  try {
    if (!fs.existsSync(outputPath)) {
      const color = `#${Math.floor(Math.random() * 16777215)
        .toString(16)
        .padStart(6, '0')}`
      console.log(`Using ${color} for: ${outputPath}`)
      await sharp('source.jpg').tint(color).toFile(outputPath)
    }
  } catch (err) {
    console.error(err)
  }
}

for (let i = 1; i < 17; i++) {
  makeImage(i, 'a')
  makeImage(i, 'b')
}