bitmap-manipulation
Node.js package for in-memory bitmap manipulation.
Features
- Creating bitmaps (1, 2 or 4 bytes per pixel, in big- or little-endian)
- Changing the color depth
- Reading 8-bit .bmp files
- Saving .bmp files
- Getting/setting pixels
- Change the color of every pixel in a specific color
- Drawing rectangles (horizontal gradient in greyscale possible)
- Drawing circles/ellipses
- Inverting the bitmap
- Drawing a bitmap or a portion of it on a bitmap
- Drawing text with a bitmap font
Example
"use strict"; const bitmapManipulation = ; // Create bitmaplet bitmap = 400 300; // Draw rectangle with borderbitmap; // Draw another bitmap with some source pixels in a specific color handled as transparentlet overlayBitmap = Bitmap;bitmap; // Draw textlet font = "P:\\ath\\to\\Font.json";font;bitmap; // The raw pixel data can also be processed in a user-specific waylet bitmapData = bitmapdata; // Return a Node.js Buffer
Image formats
With release 2.0.0, drawing and pixel storage are separated. This way,
different image formats (e.g. RGB with interleaved or planar storage) can be used
by providing a Canvas
implementantion to the Bitmap
constructor.
The following canvas implementations are included in the distribution:
Class name | Description |
---|---|
canvas.Grayscale | Grayscale pixel values |
canvas.RGB | RGB pixel values, interleaved storage (R-G-B-R-G-B) |
canvas.PlanarRGB | RGB pixel values, planar storage (R-R-G-G-B-B) |
canvas.InterleavedStorage | Interleaved storage of values with multiple components |
canvas.PlanarStorage | Planar storage of values with multiple components |
canvas.Base | Base class, use this for custom implementations |
Note that drawing gradients using drawGradientRect()
only produces sensible results on a grayscale canvas.
Example: RGB image with 8 bits per pixel per color channel
const bitmapManipulation = ; // Create a canvas that stores interleaved RGB pixels let canvas = 400 300 1; // Create a bitmap that uses this canvas for pixel storagelet bitmap = canvas; // Draw a rectangle filled with cyan and a purple border.// Note that the RGB canvas requires pixel values to be RGB arraysbitmap; // Get bytes of the imagelet imageData = bitmapdata;
Example: RGBA image with 16 bits per pixel per color channel
const bitmapManipulation = ; // Create a canvas that stores interleaved RGBA pixels let canvas = 400 300 4 2; // Create a bitmap that uses this canvas for pixel storagelet bitmap = canvas; // Draw a rectangle filled with half-opaque cyan and a solid purple border.let halfOpaqueCyan = 0 65535 65535 32767;let solidPurple = 65535 0 65535 65535;bitmap; // Get bytes of the imagelet imageData = bitmapdata;
BMP file support
Loading from and writing to BMP files is supported using the subclass BMPBitmap
.
See examples/Drawing
for details.
Documentation
The documentation can be generated from the source code by:
jsdoc index.js
License
MIT