This project is part of the @thi.ng/umbrella monorepo.
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.
STABLE - used in production
Search or submit any issues for this package
yarn add @thi.ng/pixel-io-netpbm
ES module import:
<script type="module" src="https://cdn.skypack.dev/@thi.ng/pixel-io-netpbm"></script>
For Node.js REPL:
# with flag only for < v16
node --experimental-repl-await
> const pixelIoNetpbm = await import("@thi.ng/pixel-io-netpbm");
Package sizes (gzipped, pre-treeshake): ESM: 1.36 KB
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);
// PackedBuffer {
// width: 12,
// height: 8,
// format: [Object],
// pixels: 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"
]
)
);
Karsten Schmidt
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
}
© 2021 Karsten Schmidt // Apache Software License 2.0