Skip to content

Interlaces raw pixel buffers from multiple images into one suitable for lenticular printing purposes

Notifications You must be signed in to change notification settings

Fredwar88/lenticular-interlacer

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lenticular interlacer Build Status Coverage Status

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-interlacer

Usage

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

About

Interlaces raw pixel buffers from multiple images into one suitable for lenticular printing purposes

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 100.0%