@thi.ng/pixel-io-netpbm
TypeScript icon, indicating that this package has built-in type declarations

2.1.124 • Public • Published

@thi.ng/pixel-io-netpbm

npm version npm downloads Mastodon Follow

[!NOTE] This is one of 190 standalone projects, maintained as part of the @thi.ng/umbrella monorepo and anti-framework.

🚀 Please help me to work full-time on these projects by sponsoring me on GitHub. Thank you! ❤️

About

Multi-format NetPBM reader & writer support for @thi.ng/pixel.

This package can read & write binary NetPBM image formats from byte arrays/buffers to @thi.ng/pixel pixel buffers (aka PackedBuffer).

Source format Destination format Rec. file extension(1)
1 bit GRAY8(2) .pbm
2-8 bit grayscale GRAY8 .pgm
9-16 bit grayscale GRAY16 .pgm
24 bit RGB ARGB8888 .ppm

(1) no relevance to actual parse/export logic (2) currently no support for actual 1-bit pixel buffers

Furthermore the parseHeader() function can be used to just extract image type, size and other meta data (from comments), without parsing the full image.

Status

STABLE - used in production

Search or submit any issues for this package

Installation

yarn add @thi.ng/pixel-io-netpbm

ES module import:

<script type="module" src="https://cdn.skypack.dev/@thi.ng/pixel-io-netpbm"></script>

Skypack documentation

For Node.js REPL:

const pixelIoNetpbm = await import("@thi.ng/pixel-io-netpbm");

Package sizes (brotli'd, pre-treeshake): ESM: 1.24 KB

Dependencies

Usage examples

One project in this repo's /examples directory is using this package:

Screenshot Description Live demo Source
Multi-layer vectorization & dithering of bitmap images Demo Source

API

Generated API docs

import * as pbm from "@thi.ng/pixel-io-netpbm";
import * as fs from "fs";

const src = fs.readFileSync("a.pbm");
// <Buffer 50 34 0a 23 20 67 65 6e 65 72 61 74 65 64 20 62 79...>

// parse image header data
// P4 type => 1bit bitmap
pbm.parseHeader(src)
// {
//     type: 'P4',
//     width: 12,
//     height: 8,
//     max: undefined,
//     start: 47,
//     comments: [ 'generated by @thi.ng/pixel-io-netpbm' ]
// }

const img = pbm.read(src);
// IntBuffer {
//   width: 12,
//   height: 8,
//   format: [Object],
//   data: Uint8Array(96) [
//     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
//     255, 255, 255,   0,   0, 255, 255, 255, 255, 255,   0, 255,
//     255, 255,   0,   0,   0,   0, 255, 255, 255,   0,   0, 255,
//     255,   0,   0, 255, 255,   0,   0, 255,   0,   0,   0, 255,
//     255,   0,   0,   0,   0,   0,   0, 255,   0,   0,   0, 255,
//     255,   0,   0, 255, 255,   0,   0, 255, 255,   0,   0, 255,
//     255,   0,   0, 255, 255,   0,   0, 255, 255, 255,   0, 255,
//     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
//   ]
// }

// convert to RGB image and export w/ additional meta data
// (will be stored in PBM header comments)
fs.writeFileSync(
    "a-rgb.ppm",
    pbm.asPPM(
        img.as(RGB888),
        [
            "@prefix dc: http://purl.org/dc/terms/",
            "dc:created 2021-02-08",
            "dc:creator toxi"
        ]
    )
);

Authors

If this project contributes to an academic publication, please cite it as:

@misc{thing-pixel-io-netpbm,
  title = "@thi.ng/pixel-io-netpbm",
  author = "Karsten Schmidt",
  note = "https://thi.ng/pixel-io-netpbm",
  year = 2021
}

License

© 2021 - 2024 Karsten Schmidt // Apache License 2.0

Package Sidebar

Install

npm i @thi.ng/pixel-io-netpbm

Weekly Downloads

313

Version

2.1.124

License

Apache-2.0

Unpacked Size

35.2 kB

Total Files

10

Last publish

Collaborators

  • thi.ng