{
    "mode": "man",
    "parameter": "ppmchange",
    "section": "1",
    "url": "https://www.chedong.com/phpMan.php/man/ppmchange/1/json",
    "generated": "2026-10-05T06:01:00Z",
    "synopsis": "",
    "sections": {
        "NAME": {
            "content": "ppmchange - change all pixels of one color to another in a PPM image\n\n",
            "subsections": []
        },
        "SYNOPSIS": {
            "content": "",
            "subsections": [
                {
                    "name": "ppmchange",
                    "content": "[-closeness=closenesspercent]  [-remainder=remaindercolor]  [-closeok]  [oldcolor newcolor]\n...  [ppmfile]\n\n"
                }
            ]
        },
        "EXAMPLES": {
            "content": "",
            "subsections": [
                {
                    "name": "ppmchange red blue redimage.ppm >blueimage.ppm",
                    "content": ""
                },
                {
                    "name": "ppmchange red red -remainder=black myimage.ppm >redblack.ppm",
                    "content": ""
                },
                {
                    "name": "ppmchange -closeness=10 white white black black",
                    "content": ""
                }
            ]
        },
        "DESCRIPTION": {
            "content": "This program is part of Netpbm(1).\n\nppmchange reads a PPM image as input and changes all pixels of color oldcolor to  color  new‐\ncolor.\n\nYou  may specify up to 256 oldcolor/newcolor pairs on the command line.  ppmchange leaves all\ncolors not mentioned unchanged, unless you specify the -remainder option, in which case  they\nare all changed to the single specified color.\n\nYou  can specify that colors similar, but not identical, to the ones you specify get replaced\nby specifying a \"closeness\" factor.\n\nSpecify the colors as described for the argument of the pnmparsecolor() library routine .\n\nIf a pixel matches two different oldcolors, ppmchange replaces it with the  newcolor  of  the\nleftmost specified one.\n\nThe  maxval  of  the  output image is the same as that of the input image.  If a newcolor you\nspecify cannot be exactly represented in that maxval, ppmchange assumes a color  that  is  as\nclose  as possible to what you specified but can be represented with your maxval.  Unless you\nspecify the -closeok option, ppmchange issues a warning that it is using an approximation.\n\nA common way that you can have this maxval problem, where the color  you  specify  cannot  be\nrepresented  with  your  maxval, is that your input is a PBM (black and white) image that you\nare colorizing.  The maxval in this case is 1, which severely limits the colors to which  you\ncan  change.   To avoid this problem, use pamdepth to make the maxval of your input something\nconsistent with your colors.  255 is usually a good choice.\n\nBefore Netpbm 10.22 (April 2004), ppmchange always behaved as if the user specified -closeok,\nand there was no -closeok option.\n\n\n",
            "subsections": []
        },
        "OPTIONS": {
            "content": "In addition to the options common to all programs based on libnetpbm  (most  notably  -quiet,\nsee  Common Options ), ppmchange recognizes the following command line options:\n\n\n",
            "subsections": [
                {
                    "name": "-closeness _",
                    "content": "closeness is a percentage indicating how close to the color you specified a pixel must\nbe  to  get  replaced.   By  default, it is 0, which means the pixel must be the exact\ncolor you specified.\n\nA pixel gets replaced if the distance in color between it and the color you  specified\nis less than or equal to closeness per cent of the maxval.\n\nThe  \"distance\" in color is defined as the Cartesian sum of the individual differences\nin red, green, and blue intensities between the two pixels,  normalized  so  that  the\ndifference between black and white is 100%.\n\nThis is probably simpler than what you want most the time.  You probably would like to\nchange  colors  that  have  similar chrominance, regardless of their intensity.  So if\nthere's a red barn that is variously shadowed, you want the entire barn changed.   But\nbecause  the  shadowing  significantly changes the color according to ppmchange's dis‐\ntance formula, parts of the barn are probably about as distant  in  color  from  other\nparts of the barn as they are from green grass next to the barn.\n\nMaybe ppmchange will be enhanced some day to do chrominance analysis.\n\nThis option was new in Netpbm 9.8 (September 2000).\n\n"
                },
                {
                    "name": "-closeok",
                    "content": "This  option  affects  how  ppmchange interprets a color you specify in the arguments.\nWhen you specify this option, ppmchange may use a color close to, but not the same  as\nwhat you specify.  See the description section  for details.\n\nThis  option  was new in Netpbm 10.22 (April 2004).  Before that, ppmchange always be‐\nhaved as if you specified this option.\n\n"
                },
                {
                    "name": "-remainder _",
                    "content": "ppmchange changes all pixels which are not of a color for which  you  specify  an  ex‐\nplicit replacement color on the command line to color color.\n\nAn example application of this is\n\nppmchange -remainder=black red red\n\n\nto lift only the red portions from an image, or\nppmchange -remainder=black red white | ppmtopgm\n\n\nto create a mask file for the red portions of the image.\n\n\n\n"
                }
            ]
        },
        "SEE ALSO": {
            "content": "pgmtoppm(1), ppmcolormask(1), ppm(1)\n\n",
            "subsections": []
        },
        "AUTHOR": {
            "content": "Wilson  H.  Bent. Jr. (whb@usc.edu) with modifications by Alberto Accomazzi (alberto@cfa.har‐\nvard.edu)\n",
            "subsections": []
        },
        "DOCUMENT SOURCE": {
            "content": "This manual page was generated by the Netpbm tool 'makeman' from  HTML  source.   The  master\ndocumentation is at\n\nhttp://netpbm.sourceforge.net/doc/ppmchange.html\n\nnetpbm documentation                        December 2016                   Ppmchange User Manual(1)",
            "subsections": []
        }
    },
    "summary": "ppmchange - change all pixels of one color to another in a PPM image",
    "flags": [
        {
            "flag": "",
            "long": null,
            "arg": null,
            "description": "closeness is a percentage indicating how close to the color you specified a pixel must be to get replaced. By default, it is 0, which means the pixel must be the exact color you specified. A pixel gets replaced if the distance in color between it and the color you specified is less than or equal to closeness per cent of the maxval. The \"distance\" in color is defined as the Cartesian sum of the individual differences in red, green, and blue intensities between the two pixels, normalized so that the difference between black and white is 100%. This is probably simpler than what you want most the time. You probably would like to change colors that have similar chrominance, regardless of their intensity. So if there's a red barn that is variously shadowed, you want the entire barn changed. But because the shadowing significantly changes the color according to ppmchange's dis‐ tance formula, parts of the barn are probably about as distant in color from other parts of the barn as they are from green grass next to the barn. Maybe ppmchange will be enhanced some day to do chrominance analysis. This option was new in Netpbm 9.8 (September 2000)."
        },
        {
            "flag": "",
            "long": null,
            "arg": null,
            "description": "This option affects how ppmchange interprets a color you specify in the arguments. When you specify this option, ppmchange may use a color close to, but not the same as what you specify. See the description section for details. This option was new in Netpbm 10.22 (April 2004). Before that, ppmchange always be‐ haved as if you specified this option."
        },
        {
            "flag": "",
            "long": null,
            "arg": null,
            "description": "ppmchange changes all pixels which are not of a color for which you specify an ex‐ plicit replacement color on the command line to color color. An example application of this is ppmchange -remainder=black red red to lift only the red portions from an image, or ppmchange -remainder=black red white | ppmtopgm to create a mask file for the red portions of the image."
        }
    ],
    "examples": [],
    "see_also": [
        {
            "name": "pgmtoppm",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/pgmtoppm/1/json"
        },
        {
            "name": "ppmcolormask",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/ppmcolormask/1/json"
        },
        {
            "name": "ppm",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/ppm/1/json"
        }
    ],
    "tldr": {
        "source": "official",
        "description": "Change all pixels of one color in a PPM image to another color.",
        "examples": [
            {
                "description": "Exchange the first color in each `oldcolor` - `newcolor` pair with the second color",
                "command": "ppmchange {{oldcolor1 newcolor1 oldcolor2 newcolor2 ...}} {{path/to/input.ppm}} > {{path/to/output.ppm}}"
            },
            {
                "description": "Specify how similar colors must be in order to be considered the same",
                "command": "ppmchange -closeness {{percentage}} {{oldcolor1 newcolor1 oldcolor2 newcolor2 ...}} {{path/to/input.ppm}} > {{path/to/output.ppm}}"
            },
            {
                "description": "Replace all pixels not specified in the arguments by a color",
                "command": "ppmchange {{-r|-remainder}} {{color}} {{oldcolor1 newcolor1 oldcolor2 newcolor2 ...}} {{path/to/input.ppm}} > {{path/to/output.ppm}}"
            }
        ]
    }
}