lenticular-interlacer
TypeScript icon, indicating that this package has built-in type declarations

0.1.0 • Public • Published

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

Readme

Keywords

none

Package Sidebar

Install

npm i lenticular-interlacer

Weekly Downloads

1

Version

0.1.0

License

MIT

Unpacked Size

19 kB

Total Files

9

Last publish

Collaborators

  • prewk