lenticular-interlacer
v0.1.0
Published
Interlaces raw pixel buffers from multiple images into one suitable for lenticular printing purposes
Readme
Lenticular interlacer

Interlaces raw pixel buffers from two or more images either horizontally or vertically for lenticular printing purposes.
╔═══════════╗ ╔═══════════╗ ╔═══════════╗
║###########║ ║///////////║ ║###########║
║###########║ ║///////////║ ║///////////║
║###########║ + ║///////////║ = ║###########║
║###########║ ║///////////║ ║///////////║
║###########║ ║///////////║ ║###########║
╚═══════════╝ ╚═══════════╝ ╚═══════════╝Raw pixel buffers
A raw pixel buffer is an image's pixels as a long list of flat channel data.
2*2 px 3 channels
╔═════════════════════╗
║(255,0,0) (255,255,0)║
║(64,64,0) (255,0,255)║
║(255,0,0) (255,255,0)║
╚═════════════════════╝
= Buffer [255,0,0,255,255,0,64,64,0,255,0,255,255,0,0,255,255,0] Installation
npm install lenticular-interlacerUsage
const Interlacer = require('lenticular-interlacer');
// Construct an Interlacer instance
const interlacer = new Interlacer(
60, // LPI - Lenses per inch
600, // DPI - DPI in which it will be printed
true // Orientation - horizontal/vertical: true/false
);
// Add an image to be interlaced
interlacer.push(
myBuffer, // Raw pixel buffer
3, // Number of channels (RGB = 3, RGBA = 4)
200, // Image width
100, // Image height
);
// ...add another
interlacer.push(anotherBuffer, 3, 300, 300);
// Interlace
const {
buffer,
channels,
width,
height,
} = interlacer.interlace();Example
const Interlacer = require('lenticular-interlacer');
const sharp = require('sharp');
// Source images:
// image1.jpg 400x400 RGB (3 channels)
// image2.png 500x500 RGBA (4 channels)
Promise.all([
sharp('image1.jpg').raw().toBuffer(),
sharp('image2.png').raw().toBuffer(),
])
.then(([image1, image2]) => {
const interlacer = new Interlacer(
61,
366,
true
);
interlacer
.push(image1, 3, 400, 400)
.push(image2, 4, 500, 500);
const { buffer, channels, width, height } = interlacer.interlace();
// Produce a 400x400 RGB TIFF image in 366 DPI
return sharp(buffer, { raw: { width, height, channels } })
.tiff({
// TIFF DPI is set in dots per mm
xres: 366 / 2.54,
yres: 366 / 2.54,
})
.toFile('output.tiff');
});License
MIT
