Fact-checked by Grok 2 weeks ago

Netpbm

Netpbm is an open-source toolkit consisting of over 350 command-line programs and a programming library for the manipulation and conversion of raster images across more than 100 different formats. Originally released in as an evolution of the earlier Pbmplus package from 1988, Netpbm emerged from contributions by programmers worldwide, compiling and extending tools for handling portable bitmap (PBM), grayscale (), and pixmap () formats into a comprehensive suite. Key features include support for operations such as resizing, cropping, rotating, and filtering images, with broad portability across systems, Windows, macOS, , and OS, making it a staple in engineering and scripting environments. The project is actively maintained by Bryan Henderson and distributed through , with releases occurring approximately every three months to incorporate enhancements and format compatibility updates. Notable for its , Netpbm powers processing in applications like web galleries and is integrated into distributions such as , with 114 of its programs used in at least one Fedora package as of a study.

Overview

Description

Netpbm is an open-source package comprising approximately 300 command-line graphics programs and a dedicated to manipulation and . It provides fundamental building blocks for processing raster images, enabling operations such as resizing, cropping, and applying filters to support a wide range of graphics workflows. The toolkit is primarily employed in systems for of images, where it handles nearly 100 input and output formats through dedicated converters, facilitating seamless into automated scripts and pipelines. This makes it ideal for server-side image handling, , and large-scale data processing tasks that require efficient, non-interactive manipulation. Netpbm features a strictly without any , which underscores its emphasis on portability across platforms and ease of with scripting languages like or . Originating in the late as a collection of utilities for basic image operations, it has evolved into a robust while maintaining its core focus on simplicity and extensibility. Its native formats, such as PBM, , , and , serve as intermediaries for format conversions. The project remains actively maintained as of 2025, with releases such as version 10.86.48 in September 2025 incorporating enhancements.

Components

Netpbm is composed primarily of approximately 300 standalone executable programs designed for various image processing tasks. These programs are grouped functionally into categories such as converters for format translation, editors for image modification, generators for creating new images, analyzers for examining image properties, and miscellaneous utilities. This organization facilitates targeted use in workflows involving image creation, editing, and analysis. In addition to the executables, Netpbm includes the libnetpbm programming library, which enables developers to integrate image operations and basic functions directly into custom applications. The library supports reading and writing Netpbm formats along with utilities for tasks like character drawing and conversions, and it underpins nearly all of the package's programs. The programs adhere to a consistent to indicate their scope and purpose: prefixes such as "pnm" denote operations applicable to multiple Netpbm formats (, , ), while "pbm" is specific to (black-and-white) images, "pgm" to , "ppm" to , and "pam" to the more general Portable Arbitrary Map format. Supporting these core elements are auxiliary files, including comprehensive documentation in the form of a user manual and individual program descriptions, as well as man pages for command-line reference.

Graphics Formats

Core Formats (PBM, PGM, PPM)

The core formats of Netpbm—Portable Bitmap (PBM), Portable Graymap (PGM), and Portable Pixmap (PPM)—form the foundational raster image standards within the toolkit, emphasizing simplicity and portability across systems. These formats are designed as lowest common denominators for monochrome, grayscale, and color images, respectively, facilitating easy programmatic manipulation and conversion without proprietary dependencies. Each format supports both ASCII-based (plain) and binary (raw) variants, allowing trade-offs between human readability and file efficiency. They share a common structure: a magic number identifying the format and variant, followed by whitespace-separated ASCII integers for image dimensions (width and height in pixels), an optional maxval for sample depth where applicable, and then the pixel raster data arranged row-by-row from top to bottom and left to right. PBM represents bitmaps with 1 bit per , where 0 denotes and 1 denotes . The magic numbers are P1 for the plain (ASCII) variant and P4 for the raw () variant. The header begins with the magic number, followed by the width and height in ASCII, and may include a line starting with # after the magic number. In the plain variant, values are ASCII 0s and 1s separated by whitespace; in the raw variant, pixels are packed into bytes with the most significant bit first, filling rows left to right. A simple 2x2 plain PBM example encoding a pattern is:
P1
2 2
0 1
1 0
PBM is commonly used for icons, line drawings, or masks due to its minimal storage and processing requirements. PGM extends PBM to images, storing each as an integer sample representing intensity levels from 0 () to maxval (), typically 255 for 8-bit depth but supporting up to for 16-bit. The magic numbers are P2 for plain and P5 for . The header includes the magic number, width, height, and maxval as decimal ASCII values, with data following: ASCII decimals in plain (separated by whitespace) or samples in (1 byte per if maxval < 256, otherwise 2 bytes with MSB first). Samples are gamma-adjusted according to BT.709 for perceptual linearity. A 2x2 plain PGM example with maxval 1, depicting a diagonal gradient, is:
P2
2 2
1
0 0
1 1
PGM suits applications like medical imaging scans or scientific visualizations where tonal gradations are needed without color. PPM handles color pixmaps using 24-bit RGB triplets per pixel (8 bits per channel at maxval 255), though maxval can reach 65535 in extended implementations for higher precision. Magic numbers are P3 for plain and P6 for raw. The header mirrors 's but adds the maxval after dimensions, with pixel data as RGB triplets: ASCII decimals in plain or binary bytes in raw (1 or 2 bytes per sample based on maxval). A 2x2 plain PPM example with maxval 1, showing black and white pixels, is:
P3
2 2
1
0 0 0 1 1 1
1 1 1 0 0 0
PPM is ideal for basic color graphics, such as simple diagrams or web icons, where straightforward RGB representation suffices.

PAM Format

The Portable Arbitrary Map (PAM) format serves as Netpbm's extensible, general-purpose image format, designed to accommodate a wide variety of 2D data arrays beyond the limitations of the core formats. It represents images as a rectangular array of tuples, where each tuple consists of one or more samples, enabling support for arbitrary depths such as RGB (3 samples), CMYK (4 samples), or RGBA (4 samples). Unlike the simpler core formats PBM, PGM, and PPM, which are restricted to fixed structures for monochrome, grayscale, and RGB data respectively, PAM provides greater flexibility through its descriptive header and binary-only encoding. PAM files begin with the magic number "P7" followed by a newline, after which the header consists of keyword-value pairs in ASCII format. Required fields include WIDTH (image width in pixels), HEIGHT (image height in pixels), DEPTH (number of samples per tuple, indicating channel count), and MAXVAL (maximum value for each sample, ranging from 1 to 65535). An optional TUPLTYPE field specifies the semantic meaning of the tuples, such as "RGB" for color images or "BLACKANDWHITE" for monochrome, with multiple types possible but typically one primary descriptor. The header concludes with the mandatory "ENDHDR" keyword followed by a newline, marking the transition to the binary raster data section, which contains height × width × depth samples stored in row-major order. Optional header fields may include hints for orientation (e.g., "TOPLEFT") or end-of-line handling, enhancing portability across systems. A key distinction from PBM, PGM, and PPM lies in PAM's richer metadata and support for multiple channels, including alpha for transparency, without an ASCII variant for data encoding. Transparency is implemented by incorporating an alpha sample in the tuple type, such as "RGB_ALPHA", where the alpha value scales from 0 (fully transparent) to MAXVAL (fully opaque), allowing compositing in image processing workflows. This enables PAM to handle layered or semi-transparent images natively, contrasting with the core formats' lack of such capabilities. The binary data follows immediately after the header, with each sample encoded in 1 to 4 bytes depending on MAXVAL (e.g., 1 byte for values up to 255), ensuring efficient storage without the variable-length parsing issues of ASCII formats. For illustration, a minimal PAM header for a 2×2 RGB image might appear as:
P7
WIDTH 2
HEIGHT 2
DEPTH 3
MAXVAL 255
TUPLTYPE RGB
ENDHDR
This would be followed by 12 bytes of binary data representing the red, green, and blue samples for each of the four pixels. PAM finds application in modern image workflows requiring versatility, such as processing complex visuals with transparency, multi-channel color spaces like CMYK for print, or even non-graphical 2D data arrays, making it a robust choice for tools that need to interchange diverse image types without format-specific conversions.

Extensions and Supported Formats

Netpbm formats support extensions for higher bit depths to enable greater precision in image representation. In PGM and PPM formats, the maximum value (maxval) can reach 65,535, allowing for 16 bits per sample when maxval is 256 or greater; this extension was introduced in April 2000, expanding from the prior limit of 255 for 8-bit support. PAM similarly accommodates a maxval of up to 65,535, providing 16-bit integer samples across its flexible tuple structure. Support for 32-bit depths is not available in the core formats or PAM, which are limited to 16-bit integer samples. Floating-point representations (up to 32-bit IEEE 754 single precision) are available through the separate PFM (Portable Floatmap) format, which Netpbm converters like pamtopfm and pfmtopam facilitate for high dynamic range applications. These capabilities are primarily tool-specific rather than inherent to the format specifications. Netpbm tools support approximately 92 input and output formats through dedicated converters, enabling broad interoperability while prioritizing lossless conversions where possible. Key examples include PNG for lossless compression, JPEG for lossy photographic images, TIFF for multi-page and layered files, GIF for animated and indexed color graphics, BMP for simple bitmapped representations, and XWD for X Window System dumps. Conversion between these formats often uses PAM as an intermediate representation to preserve data integrity during processing. Built-in decoders handle many formats directly, while others rely on external libraries such as libjpeg for JPEG support or libtiff for TIFF. Core Netpbm formats themselves lack native lossy compression mechanisms, directing such operations to external format converters.

Tools and Programs

Manipulation Utilities

Netpbm provides a suite of command-line utilities for manipulating images, enabling tasks such as resizing, rotating, flipping, and applying effects like noise or arithmetic operations directly on Netpbm formats including PBM, PGM, , and PAM. These tools, prefixed with pbm-, pgm-, ppm-, or pam- to indicate their primary format support, allow precise control over image transformations without requiring graphical interfaces, making them ideal for automated processing. The "Editors" category includes 67 core manipulation functions as part of the broader Netpbm package of more than 350 programs. Key utilities include pamscale for resizing and scaling images with high precision. It supports scaling by a uniform factor, independent horizontal and vertical dimensions, or fitting within specified bounds while preserving aspect ratios, using methods like Lanczos filtering for quality enlargement or reduction. For example, to halve the size of an input image:
pamscale 0.5 input.ppm > output.ppm
This command reduces both dimensions by 50%, outputting a smaller PPM file suitable for thumbnail generation. Similarly, pnmrotate performs rotation by arbitrary angles using a three-shear method with optional anti-aliasing to minimize artifacts, while pamflip is preferred for quarter-turn rotations (90, 180, or 270 degrees). A common usage for a 90-degree rotation is:
pamflip -rotate90 input.pgm > output.pgm
This transforms a grayscale PGM image, filling the background with the average of edge colors by default. For mirroring and basic orientation changes, pamflip handles flips (left-right or top-bottom) and quarter-turn s (90, 180, or 270 degrees) efficiently, outperforming general rotation for these angles due to its lossless mapping. An example for horizontal mirroring:
pamflip -leftright input.[ppm](/page/PPM) > output.[ppm](/page/PPM)
This reverses the image left-to-right, useful for correcting scanned documents or creating symmetrical effects. To introduce or simulate degradation, pamaddnoise adds various types such as Gaussian, impulse, or to individual color planes in PAM or images, aiding in testing image processing algorithms. For instance, applying Gaussian with specified sigmas:
pamaddnoise -type gaussian -sigma1 4.0 -sigma2 20.0 input.[ppm](/page/PPM) > output.[ppm](/page/PPM)
This perturbs values randomly, with the noise level controlled by parameters to mimic real-world errors. Advanced operations extend to pixel-level arithmetic and . Pamfunc applies monadic functions like , , or bitwise operations (e.g., AND, shift) across all samples in an , enabling custom transformations such as boosting or masking bits. A syntax for multiplying samples by 2:
pamfunc -multiplier=2 input.[pam](/page/PAM) > output.[pam](/page/PAM)
This doubles pixel values, clamping to the maximum if exceeded, and supports for multi-channel handling. For with masks, pbmmask generates a mask from a PBM by distinguishing foreground from , which can then be used in pipelines with tools like pnmpaste for overlaying elements. An example workflow to create and apply a mask for PBM images:
pbmmask input.pbm > mask.pbm
pnmpaste -and [background](/page/Background).pbm mask.pbm 0 0 | pnmpaste -or foreground.pbm 0 0 > composited.pbm
Though somewhat obsolete in favor of more versatile -based tools like pamcomp, it remains useful for simple masking in workflows. These utilities excel in and scripting, where they form pipelines for automated tasks like generating thumbnails from large images (e.g., combining pamscale with pamcrop for region extraction) or applying sequential effects such as followed by addition in testing suites. Their stdin/stdout supports efficient integration into shell scripts or larger processing chains, emphasizing Netpbm's role in command-line image workflows without altering file formats during manipulation.

Conversion Tools

Netpbm provides a suite of command-line utilities dedicated to converting images between its core formats (PBM, , PPM, and ) and over 100 other graphics formats, enabling bidirectional translations while prioritizing lossless processes where feasible. These tools facilitate seamless integration in pipelines, often piping output from one converter to another to avoid intermediate file storage and preserve . For instance, converters like pnmtopng, giftopnm, and pnmtojpeg handle popular formats such as , , and , respectively, with options to control quality, compression, and metadata. Key converters include pnmtopng, which transforms PNM input (including ) into output, scaling color values to 8 or 16 bits per channel for lossless representation; a basic syntax is pnmtopng input.ppm > output.png, with options like -compression=9 for maximum or -transparent=red to specify a transparent color. Similarly, giftopnm converts files to PNM, outputting PBM for monochrome, for , or for color images, as in giftopnm input.gif > output.ppm; it supports -verbose for diagnostic output and --alphaout=mask.pbm to generate a separate . For output, pnmtojpeg processes PNM input into JFIF files, using syntax like pnmtojpeg -quality=90 input.ppm > output.jpg, where -quality=n (0-100, default 75) adjusts trade-offs. Common workflows leverage as a lossless intermediate format to maintain full fidelity during multi-step conversions, such as pngtopam input.png | pnmtojpeg -quality=95 > output.jpg, which first decodes to (preserving alpha if present) before encoding to . This approach minimizes data loss across ~100 supported formats, including bidirectional support for most (e.g., jpegtopnm for to PNM), though tools issue warnings for inherently lossy formats like , where repeated conversions degrade quality—recommendations include quality settings of 50-95 and avoiding cycles like to PNM and back. Special cases arise in handling , particularly for formats like and . Conversions to/from use separate PBM masks via --alphaout in giftopnm or equivalent in pamtogif, where black pixels denote transparency; for , pngtopam with -alphapam outputs a single file incorporating an alpha channel (RGB_ALPHA or GRAYSCALE_ALPHA), while pamtopng reverses this by embedding the PAM transparency directly into PNG's tRNS or alpha chunks, ensuring lossless preservation without separate files.

Programming Library

Features

The Netpbm programming , libnetpbm, is a library designed for reading, writing, and manipulating images in the Netpbm formats, providing developers with low-level access to pixel data and image metadata. It supports the core formats—PBM for binary images, for grayscale, and for color—as well as the extensible format, enabling handling of multi-channel and high-depth images. Key reading functions include ppm_readppminit for initializing PPM headers with dimensions, maxval, and format details, and pnm_readpamrow for loading rows of pixel tuples in PAM files; writing counterparts such as ppm_writeppminit and pnm_writepamrow allow output in both ASCII (plain) and binary (raw) variants. Pixel access is facilitated through dedicated data structures: the pixel type for PPM, which stores RGB components accessible via macros like PPM_GETR(p) and PPM_ASSIGN; the gray type for PGM, representing grayscale values up to PGM_OVERALLMAXVAL (65535 for 16-bit support); and the bit type for PBM, handling black-and-white pixels efficiently. For PAM, the struct pam encapsulates image properties like width, height, depth (number of channels), maxval, and tuple type, while tuple arrays manage per-pixel samples, supporting 16-bit precision and arbitrary channel counts for formats beyond the core trio. Raster data is organized as row arrays (e.g., pixel* for PPM rows) or full 2D arrays, with allocation functions like ppm_allocrow ensuring memory management. The includes modules for operations, enabling manual processing such as on samples to combine values from multiple images, scaling by resizing based on factors while preserving aspect ratios, and conversions by manipulating tuple types (e.g., RGB to via PAM depth adjustments). These features prioritize efficient in-memory processing, with headers consistently providing essential like image dimensions and maxval for validation and rendering. For higher-level manipulations, developers typically implement logic using the pixel access functions or invoke dedicated Netpbm tools via pm_system. Error handling relies on pm_error, a function that outputs descriptive messages for issues such as malformed headers, invalid formats, or memory failures, typically terminating the program after logging to . This ensures robust development by catching common pitfalls in file I/O and .

Integration and Usage

To integrate the Netpbm library into C applications, developers must include relevant headers such as <netpbm/ppm.h>, <netpbm/pgm.h>, or the more versatile <netpbm/pam.h> for Portable Anymap () support, and link against the library using -lnetpbm during compilation. The library is distributed as development packages on various systems; for instance, on Debian-based distributions, it can be installed via apt install libnetpbm-dev, which provides the necessary headers and static libraries, while on macOS, brew install netpbm from Homebrew supplies the components. A typical usage involves reading a image, performing manipulations like scaling, and writing the output. The following code snippet demonstrates reading a PPM file using ppm_readppm(), applying a simple nearest-neighbor scaling to double the dimensions by duplicating pixels (a basic -based approach without external tools), and writing the result as a new PPM file; it initializes the library with pm_init() and handles raster allocation.
c
#include <stdio.h>
#include <netpbm/ppm.h>
#include <netpbm/pm.h>

int main(int argc, char *argv[]) {
    FILE *ifp, *ofp;
    int rows, cols;
    pixval maxval;
    pixel **pixels, **newpixels;
    int row, col;
    pm_init(argv[0], 0);

    ifp = pm_openr("-");
    pixels = ppm_readppm(ifp, &cols, &rows, &maxval);
    pm_close(ifp);

    /* Allocate scaled raster (double size via duplication) */
    newpixels = ppm_allocarray(2 * cols, 2 * rows);
    for (row = 0; row < rows; ++row) {
        for (col = 0; col < cols; ++col) {
            newpixels[2 * row][2 * col] = pixels[row][col];
            newpixels[2 * row][2 * col + 1] = pixels[row][col];  /* Duplicate horizontally */
            newpixels[2 * row + 1][2 * col] = pixels[row][col];    /* Duplicate vertically */
            newpixels[2 * row + 1][2 * col + 1] = pixels[row][col];
        }
    }
    ppm_freearray(pixels, rows);

    ofp = pm_openw("-");
    ppm_writeppm(ofp, newpixels, 2 * cols, 2 * rows, maxval, 0);
    pm_close(ofp);
    ppm_freearray(newpixels, 2 * rows);

    return 0;
}
For more advanced scaling, such as Lanczos resampling, developers can invoke the pamscale utility via the library's pm_system() function after writing the input to a temporary file, though this hybrid approach combines library I/O with external execution. The Netpbm library integrates into larger projects for image processing tasks; for example, it powers plugins through the Netpbm2Gimp tool, which compiles Netpbm programs directly into GIMP-compatible extensions, and supports Netpbm formats natively for conversions and manipulations as part of its format-handling backend. Custom scripts in can leverage wrappers like the netpbmfile library, which provides pure-Python reading and writing of Netpbm files without direct C bindings. Best practices for using the library include always checking return values from functions like ppm_readppm() to detect file errors or invalid formats, manually managing memory for rasters with ppm_allocarray() and ppm_freearray() to prevent leaks, and employing generic row-reading functions such as pnm_readpnmrow() to support multiple formats (, , ) seamlessly in a single codebase. The core Netpbm library is implemented , limiting direct use to C/C++ environments, though language bindings and wrappers exist for Go via the netpbm package and through pure parsers in the netpbm Hackage library.

History and Development

Origins

Netpbm originated in the with the development of the Portable Bitmap (PBM) format by Jef Poskanzer, who created it as a simple, text-based format suitable for transmission via and basic manipulation on Unix systems. In 1988, Poskanzer released Pbmplus, an initial toolkit that compiled his various utilities for working with PBM files, including converters to other graphics formats commonly used in early computing environments. By the end of 1988, Poskanzer expanded the toolkit to include the and formats, enabling support for and color images while maintaining the portable, ASCII-compatible structure of the original PBM. Pbmplus was distributed primarily through newsgroups such as comp.sources.misc and FTP servers associated with the , fostering early community engagement among Unix users. The last official release of Pbmplus occurred on December 10, 1991, after which Poskanzer ceased active maintenance despite growing external contributions. In 1993, the project was reorganized and rebranded as Netpbm to serve as a community-maintained successor to Pbmplus, incorporating contributions from developers worldwide and emphasizing collaborative development. The last regular Netpbm release was in March 1994, after which the project was neglected until September 1995, when Anthony Thyssen issued an unofficial update (Netpbm-1mar1994.p1). This transition marked Netpbm's shift toward a more distributed model, building directly on the accumulated tools and formats from Pbmplus. From its inception, Netpbm's tools were designed for Unix-based systems, particularly to support graphics applications within the , with a strong emphasis on portability across different hardware and operating environments lacking advanced . Early adoption occurred prominently in academic and research settings during the late 1980s and early 1990s, where it became a standard for image processing scripts in projects, archived in repositories like the Pilot European Image Processing Archive (PEIPA).

Key Milestones and Maintenance

In September 1999, Bryan Henderson assumed maintenance of the Netpbm project, addressing bugs such as those in Xbmtopbm and reorganizing the collection of unsupported versions and outdated documentation. In April 2000, the project relocated to for improved collaboration and distribution. That same year, Netpbm introduced 16-bit support for and formats, allowing a maximum value (maxval) of with a defined byte order to ensure portability across systems. In August 2000, the format was added, along with corresponding library routines to handle its multi-plane structure for enhanced flexibility in image representation. Release 10 in June 2002 marked a significant reorganization, consolidating the utilities into a single package with a unified and comprehensive documentation for easier maintenance and user access. By January 2004, gamma-adjusted sample value support was implemented in version 10.20, including functions like pm_[un]gamma709() to better handle conversions. In August 2006, Netpbm adopted for , establishing multiple stable branches—super stable, stable, and advanced—alongside a development branch to balance reliability and innovation; this period also saw further enhancements to capabilities. F. Urushibata began contributing in 2004, starting with fixes to the fax format converter pbmtog3 and later providing major speedups for PBM operations using MMX/ instructions, as well as creating test facilities in 2012. Netpbm maintains a regular release cadence of approximately every three months, with the latest stable version, 10.86.48, released on September 27, 2025. The project remains actively developed under Bryan Henderson's primary maintenance, hosted on , and comprises over 330 distinct tools for image manipulation and conversion. It is widely integrated into distributions, such as , where a 2012 study identified 114 Netpbm programs in active use.

Licensing and Availability

License Terms

Netpbm is distributed under a collection of permissive licenses, with individual tools and components licensed separately to accommodate contributions from multiple authors. The majority of the software falls under dedication or highly permissive terms, allowing free use, modification, and redistribution without royalties, subject to basic requirements such as preserving notices where applicable. This licensing approach reflects the project's evolution from its origins as Pbmplus, where many core utilities were explicitly placed in the by primary developer Jef Poskanzer. Specific licenses vary across the toolkit: numerous programs, including common converters like anytopnm and pamcut, use Poskanzer's custom notice, which disclaims and grants unrestricted rights. Others adopt the BSD license or variants, such as for tools like 411toppm and pstopnm, permitting commercial use with minimal attribution obligations. A smaller subset employs the version 2 (GPLv2), often for components integrating GPL-licensed dependencies (e.g., fiascotopnm). Components using libraries follow the Independent JPEG Group's permissive terms (e.g., jpegtopnm). The programming core aligns with BSD-like conditions, emphasizing no and free redistribution while requiring notice preservation. These details are documented in the source code files and a comprehensive summary maintained within the project. The project, currently maintained by Bryan Henderson since 1999, explicitly states no warranties of any kind and permits commercial applications as long as terms are honored. Redistribution of is unrestricted and freely available via , while binaries must retain all original , , and disclaimer notices to comply with the varied terms. Historical Pbmplus elements remain , whereas subsequent additions and ports specify their licenses directly in the respective source files, ensuring transparency for users integrating Netpbm components.

Distribution and Ports

Netpbm is primarily distributed through the project page, where users can download source tarballs for stable releases, such as netpbm-10.86.48.tgz, released on September 27, 2025. These archives contain the complete , which can be built and installed using standard tools like GNU Make after extracting the tarball and running ./configure && make && make install. The project also provides access to the via for the stable, advanced, and development branches, allowing users to check out and build the latest code. For easier installation on systems, Netpbm is available through various package managers. On and , it can be installed via apt install netpbm, which pulls in the necessary dependencies and places binaries in /usr/bin. On macOS, Homebrew users can run brew install netpbm to obtain a pre-built version compatible with the system. and related distributions support installation with dnf install netpbm, while users can build and install from the ports collection using cd /usr/ports/graphics/netpbm && make install clean. Netpbm has native support for Unix and systems, with binaries typically installed to /usr/bin, header files to /usr/include/netpbm, and man pages to /usr/share/man. The package also includes a directory, often at /usr/share/doc/netpbm, containing user manuals and specifications. On Windows, Netpbm can be ported using , where it is available as a package via the Cygwin setup installer, providing a environment for the tools. Similarly, MSYS2 supports Netpbm through its pacman , enabling native Windows builds with pacman -S mingw-w64-x86_64-netpbm. For embedded systems, the portable C codebase allows cross-compilation using toolchains like those for or , often requiring configuration adjustments for minimal environments. Official stable releases are in the 10.xx series, with the 10.86.48 update in September 2025 focusing on bug fixes, improved format support, and enhanced compatibility across platforms. Some distributions use their own versioning schemes, such as 11.xx. Beta branches, accessible via the advanced trunk, offer experimental features ahead of stabilization. All distributions maintain compliance, ensuring binaries are freely redistributable under the project's terms.

References

  1. [1]
    Netpbm home page
    Netpbm is a toolkit for manipulation of graphic images, including conversion of images between a variety of different formats.Graphics tools and converters · The Netpbm Formats · Getting Netpbm
  2. [2]
    Netpbm History
    Netpbm has always been written primarily in C. Netpbm code dates to a time when ANSI C was brand new and consequently, the original code is written in older C.Missing: overview | Show results with:overview
  3. [3]
    Netpbm - SourceForge
    There are over 300 separate tools in the package including converters for about 100 graphics formats. Examples of the sort of image manipulation we're talking ...
  4. [4]
    User manual for Netpbm - SourceForge
    Aug 8, 2020 · Netpbm is a package of graphics programs and a programming library. There are over 330 separate programs in the package, most of which have pbm, pgm, ppm,pam, ...
  5. [5]
    Directory of Netpbm programs
    Netpbm Program Directory. We have the programs divided into these categories: Converters; Editors; Generators; Analyzers; Miscellaneous ...
  6. [6]
    The PBM Format - Netpbm
    Jun 27, 2024 · The PBM format is a lowest common denominator monochrome file format. It serves as the common language of a large family of bitmap image conversion filters.DESCRIPTION · THE LAYOUT · Plain PBM
  7. [7]
    PGM Format Specification - Netpbm
    The PGM format is a lowest common denominator grayscale file format. It is designed to be extremely easy to learn and write programs for.The Format · Minimal Subset · Plain Pgm
  8. [8]
    PPM Format Specification - Netpbm
    A PPM file consists of a sequence of one or more PPM images. There are no data, delimiters, or padding before, after, or between images.The Format · Minimal Subset · Plain Ppm
  9. [9]
    PAM format specification - Netpbm
    Nov 27, 2013 · The PAM image format is a lowest common denominator 2 dimensional map format. It is designed to be used for any of myriad kinds of graphics.GENERAL · The Confusing Universe of... · THE LAYOUT · DEFINED TUPLE TYPES
  10. [10]
    PFM Format Description - Netpbm
    Feb 27, 2024 · This document describes the PFM graphic image file format as understood by the Netpbm ... That string is an IEEE 32 bit floating point number code ...
  11. [11]
    Pnmtopng User Manual - Netpbm
    Mar 13, 2019 · DESCRIPTION. This program is part of Netpbm. pnmtopng reads a PNM image as input and produces a PNG image as output. Color component values in ...SYNOPSIS · DESCRIPTION · OPTIONS · Note: Option Syntax of Older...
  12. [12]
    Pnmtojpeg User Manual - Netpbm
    Apr 23, 2007 · pnmtojpeg converts the named PBM, PGM, or PPM image file, or the standard input if no file is named, to a JFIF file on the standard output.DESCRIPTION · OPTIONS · JPEG LOSS · OTHER PROGRAMS
  13. [13]
  14. [14]
    Pamscale User Manual
    ### Description
  15. [15]
    Pnmrotate User Manual
    ### Description
  16. [16]
    Pamflip User Manual
    ### Description
  17. [17]
    Pamaddnoise User Manual - Netpbm
    Aug 21, 2023 · pamaddnoise adds the specified noise type to a Netpbm image. pamaddnoise treats a PPM image as 3 independent planes, not as a plane of colors in ...Missing: syntax example
  18. [18]
    Pamfunc User Manual
    ### Description
  19. [19]
    Pbmmask User Manual - Netpbm
    Sep 28, 2021 · pbmmask reads a PBM image as input and generates a corresponding mask of the foreground areas as another PBM image. This is probably obsoleted ...
  20. [20]
    Giftopnm User Manual - Netpbm
    Sep 13, 2012 · This program is part of Netpbm. This is a graphics format converter from the GIF format to the PNM (ie PBM, PGM, or PPM) format.DESCRIPTION · OPTIONSMissing: documentation | Show results with:documentation
  21. [21]
    Pngtopam User Manual - Netpbm
    Jul 22, 2008 · To convert in the other direction, use pamtopng or pnmtopng. The former is the more modern of the two and can recognize transparency information ...Synopsis · Description · Options
  22. [22]
    Pamtopng User Manual - Netpbm
    Mar 13, 2019 · pnmtopng is a complex, feature-laden program. It lets you control various arcane aspects of the conversion and create PNGs with various arcane ...
  23. [23]
    User manual for old ppm functions
    ### Summary of PPM Functions and Data Structures from libppm.html
  24. [24]
    Libnetpbm Image Processing Manual
    Here is an example of a C program that uses libnetpbm to read a Netpbm image input and produce a Netpbm image output.Example · Libnetpbm Classes · The Pam Structure
  25. [25]
    None
    Nothing is retrieved...<|separator|>
  26. [26]
    User manual for old pbm functions
    ### Summary of Functions and Data Structures from libpbm.html
  27. [27]
    Error Handling - Netpbm
    pm_error() is a printf() style routine that simply throws an error. It issues an error message exactly like pm_errormsg() would in the process. pm_errormsg().
  28. [28]
    None
    Nothing is retrieved...<|control11|><|separator|>
  29. [29]
    netpbm - package of graphics manipulation programs and libraries
    Netpbm is a package of graphics programs and programming libraries. There are over 220 separate programs in the package, most of which have "pbm", "pgm", "ppm", ...<|control11|><|separator|>
  30. [30]
    netpbm - Homebrew Formulae
    netpbm is an image manipulation tool, a library for manipulating JPEG-2000 images, and a JPEG image codec that aids compression and decompression.
  31. [31]
    Libnetpbm Utility Functions
    Mar 8, 2024 · This page documents functions in the Netpbm subroutine library that are not directly related to image data. For introductory and general ...Initialization · File Or Image Stream Access · Endian I/oMissing: manipulation | Show results with:manipulation
  32. [32]
    pamscale(1) — netpbm — Debian unstable
    Sep 28, 2025 · As a first step in resampling, pamscale converts the source image, which is a set of discrete pixel values, into a continuous step function. A ...
  33. [33]
    Netpbm2Gimp download | SourceForge.net
    Oct 19, 2024 · Netpbm2Gimp automatically compiles the unmodified source code of a Netpbm graphics program into a GIMP plug-in.
  34. [34]
    ImageMagick v6 Examples -- Common Image Formats
    However you can use NetPBM image processing set to do the final conversion ... A PSD image file is the Photoshop Working image file format, just as XCF is the ...
  35. [35]
    Libnetpbm Image Processing Manual
    This reference manual covers functions in the libnetpbm library for processing images, using the Netpbm image formats and the libnetpbm in-memory image formats.Reading Netpbm Files · Writing Netpbm Files · Transforming Pixels
  36. [36]
    netpbm package - github.com/spakin/netpbm - Go Packages
    Sep 6, 2024 · netpbm is a package for the Go programming language that implements image decoders and encoders for the Netpbm image formats. The package ...
  37. [37]
    netpbm: Loading PBM, PGM, PPM image files - Hackage
    Feb 28, 2021 · This package contains pure Haskell parsers for the netpbm image formats: PBM, PGM and PPM, for both ASCII and binary encodings.Missing: test verification<|control11|><|separator|>
  38. [38]
    Software Tools for Vision
    3.1 PBMPLUS and NETPBM​​ All the images on PEIPA, for example, are currently stored in PBMPLUS format. The package also provides some limited processing ...
  39. [39]
    Netpbm - graphics tools and converters download | SourceForge.net
    Rating 4.7 (17) · Free · Design/GraphicsA whole bunch of utilities for primitive manipulation of graphic images. Wide array of converters from one graphics format to another.
  40. [40]
    None
    ### Summary of Netpbm Copyrights (Based on Netpbm 9.20, October 7, 2001)
  41. [41]
    Netpbm - graphics tools and converters Files - SourceForge
    ... Latest Version netpbm-10.86.48.tgz (2.9 MB). Email in envelope. Get an email when there's a new version of Netpbm - graphics tools and converters. Next. Home ...<|control11|><|separator|>
  42. [42]
    Getting Netpbm - SourceForge
    The most basic way to get Netpbm is to get the source package from the Netpbm Sourceforge project and build it for the particular system on which you want to ...Netpbm Source Package · Downloading A Tarball · Downloading From Subversion
  43. [43]
    Release System - Netpbm - SourceForge
    Every year or two, we copied the current Latest release as the new Stable release. ... By Bryan Henderson, Lacey, wa; bryanh@giraffe-data.com last checked 2023.06 ...
  44. [44]
    graphics/netpbm: Toolkit for conversion of images between different ...
    Apr 27, 2024 · Netpbm is a toolkit for manipulation of graphic images, including conversion of images between a variety of different formats.<|control11|><|separator|>
  45. [45]
    Cygwin Package Summary for netpbm
    Package: netpbm ; description: Netpbm is a toolkit for manipulation of graphic images, including conversion of images between a variety of different formats.Missing: ports MSYS2 embedded
  46. [46]
    MSYS2
    MSYS2 is a collection of tools and libraries providing you with an easy-to-use environment for building, installing and running native Windows software.What is MSYS2? - MSYS2 · MSYS2 Installer · Updating MSYS2 · MSYS2 PackagesMissing: Netpbm ports embedded
  47. [47]
    netpbm package versions - Repology
    Versions for netpbm ; AlmaLinux 8 · netpbm, 10.82.00 ; AlmaLinux 9 · netpbm, 10.95.00 ; Alpine Linux 3.17 · netpbm · 10.73.41 · Potentially vulnerable ; Alpine Linux ...