Home / Alt manpages / pamchannel(1)

  • pamchannel(1)
  • User command
  • linux

Extract PAM Image Channels with pamchannel

You will turn a multi-channel PAM image into a new PAM image containing the channels you choose, in the order you choose. This is useful for dropping an alpha or mask plane, selecting one component for inspection, or changing the order of an RGB image without editing the source.

Allow about 10 minutes for a first pass. You need Netpbm installed, a PAM input image, and enough disk space for the output. The examples use ordinary user permissions and write new files; none needs sudo.

1. Check the installed command

Start by confirming which executable will run and which Netpbm build supplies it. This guide was checked with the Debian netpbm package version 2:11.05.02-1.1build1, reporting Netpbm 11.5.2 at runtime. Your package may report a different version.

$ command -v pamchannel
/usr/bin/pamchannel
$ pamchannel -version
pamchannel: Using libnetpbm from Netpbm Version: 11.5.2
...

The version output also includes build details. If command -v prints nothing, install Netpbm through your distribution's normal package mechanism before continuing. Installation changes system state and may require elevated privileges, but channel extraction itself does not.

2. Inspect the input before selecting channels

Use pamfile to see the input dimensions, depth and maximum sample value. The depth is the number of channels, and channel numbering starts at zero.

$ pamfile /path/to/input.pam
/path/to/input.pam: PAM, 1920 by 1080 by 4 maxval 255
    Tuple type: RGB_ALPHA

In this example the valid channel numbers are 0, 1, 2 and 3. Do not guess from a filename: a four-channel image is not necessarily RGB plus alpha, and the tuple type is metadata rather than proof of the content. Check the producer's format documentation if the channel meaning matters.

Checkpoint

Write down the input depth and the channel numbers you intend to keep. The output depth will equal the number of channel arguments, not the input depth.

3. Select channels into a new file

Pass channel numbers after the options and redirect standard output to a new file. This example keeps channels 0 and 2 from a four-channel input.

$ pamchannel -infile /path/to/input.pam 0 2 > /path/to/selected.pam

-infile is the input-file option used by pamchannel. It defaults to standard input, which means the same operation can be written as a pipeline:

$ cat /path/to/input.pam | pamchannel 0 2 > /path/to/selected.pam

The output has the input width and height, but a depth of 2. Its tuple type is an empty string unless you provide -tupletype. The channel order follows the arguments, so 0 2 and 2 0 produce different two-channel layouts.

4. Verify the result

Inspect the new file rather than trusting the command's exit status alone. For the preceding example, the expected shape is two planes with the original dimensions.

$ pamfile /path/to/selected.pam
/path/to/selected.pam: PAM, 1920 by 1080 by 2 maxval 255
    Tuple type:

If the dimensions or depth are wrong, stop and remove only the newly created output after checking that it is not a file you meant to keep:

$ rm -- /path/to/selected.pam

This removal is irreversible unless you have another copy. It is not an undo for changes to the source, because pamchannel reads the source and does not edit it.

5. Reorder or label the output deliberately

To reorder three channels, list them in the desired output order. This keeps the original image untouched and writes a three-plane result:

$ pamchannel -infile /path/to/input.pam 2 1 0 > /path/to/reversed.pam
$ pamfile /path/to/reversed.pam
/path/to/reversed.pam: PAM, 1920 by 1080 by 3 maxval 255
    Tuple type:

Use -tupletype when downstream software needs a recognised tuple type. The option accepts a string up to 255 characters. Here the selected planes are labelled as RGB in the output header:

$ pamchannel -tupletype RGB -infile /path/to/input.pam 2 1 0 > /path/to/rgb.pam
$ pamfile /path/to/rgb.pam
/path/to/rgb.pam: PAM, 1920 by 1080 by 3 maxval 255
    Tuple type: RGB

Only add a label that accurately describes the selected data. A tuple type changes the header metadata; it does not convert sample values or make arbitrary channels into colour channels.

6. Diagnose the common failures

An error saying that the highest numbered channel is lower than the number you supplied means the index is invalid. Count from zero and inspect the input again with pamfile. For a depth of 3, the highest valid index is 2.

$ pamchannel -infile /path/to/input.pam 3 > /tmp/should-not-exist.pam
pamchannel: You specified channel number 3. The highest numbered
channel in the input image is 2.

Use a temporary destination when testing a command whose input or channel list is uncertain. A shell redirection can create an empty output before the program reports an error, so check the exit status and inspect the file before using it:

$ pamchannel -infile /path/to/input.pam 3 > /tmp/pamchannel-test.pam
$ status=$?
$ test "$status" -eq 0 && pamfile /tmp/pamchannel-test.pam
$ printf 'pamchannel exit status: %s\n' "$status"
pamchannel exit status: 1

For a failed test, remove the temporary file when you no longer need it:

$ rm -- /tmp/pamchannel-test.pam

If the input is not a valid PAM stream, repair or regenerate the input rather than trying random channel numbers. If a pipeline stops unexpectedly, run pamchannel with -infile and a separate output file so that the input can be inspected independently.

7. Handle streams and standard input

pamchannel supports multi-image streams and produces a corresponding output stream. This makes it suitable for a pipeline, but it also means that a command may emit more than one image when its input contains more than one. Verify the complete stream with a tool that understands the format, and avoid assuming that a single input file always contains one image.

The channel arguments are not an input filename, which is the unusual part of this command's interface. Put the filename in -infile, or provide it through standard input, then place every selected channel number after the options. If you accidentally put a filename among the channel arguments, pamchannel will treat it as an invalid channel specification.

Done means

  • pamchannel resolves to the Netpbm installation you intended to use.
  • pamfile confirms the source dimensions and depth.
  • The selected channel indexes are zero-based and within the source depth.
  • The output depth equals the number of selected channels, with order checked explicitly.
  • The tuple type is blank or deliberately supplied and accurate.
  • The output passes pamfile inspection, and the source remains unchanged.